首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRCode ZXing示例

QRCode ZXing示例
EN

Stack Overflow用户
提问于 2013-11-05 01:05:07
回答 2查看 966关注 0票数 1

我需要创建一个windows phone的qrreader。

Xzing示例只打印到视频的qr字符串捕获,我需要一个例子,如何理解这个字符串是一个电子名片,因此,保存在联系人中,或如果它是一个链接,并在浏览器中打开它。

代码语言:javascript
复制
private void ScanPreviewBuffer()
    {

            try
            {
                _photoCamera.GetPreviewBufferY(_luminance.PreviewBufferY);
                var binarizer = new HybridBinarizer(_luminance);
                var binBitmap = new BinaryBitmap(binarizer);
                var result = _reader.decode(binBitmap);
                Dispatcher.BeginInvoke(() => CheckQr(result.Text));
            }
            catch {  }
     }

    private void CheckQr(string qrString)
    {

        VibrateController vibrate = VibrateController.Default;
        vibrate.Start(TimeSpan.FromMilliseconds(500));

        MessageBox.Show(qrString);
        /* CONTROLS HERE */
    }
EN

回答 2

Stack Overflow用户

发布于 2013-11-06 07:31:35

显然,您必须从解析qrString内容开始,以获得您想要的内容,我想我们都同意这一点;)

因此,主要问题是:

  • 确定格式(url或vcard)
  • 解析它们(如果需要)
  • 使用它们触发想要的操作

1.关于vCard的

要确定您的qrString是否持有vCard,也许您可以尝试匹配(使用string.Containsstring.StartsWith方法) vCard标头,该标头为BEGIN:VCARD,并且从一个版本到另一个版本似乎总是相同的(参见wikipedia)。

对于Windows phone7,没有内置的功能来解析vCards,所以你必须自己做,或者你可以尝试使用vCard library For Windows Phone。它的用法如下:

代码语言:javascript
复制
   byte[] byteArray = Encoding.UTF8.GetBytes(qrString);
   using (StreamReader reader = new StreamReader(new MemoryStream(byteArray)))
   {
      vCard card = new vCard(reader);
      // access here card.PropertyFromvCard to get the information you need
   }

关于它的文档并不多,但是sources在Codeplex上是可用的,所以您可能会找到所需的所有属性名称和示例。

对于Windows phone8,内置的ContactInformation.ParseVcardAsync方法可以帮助你解析qrString内容(这是一个官方的tutorial)

然后,您需要最终创建您的联系人:

如果您在Windows Phone 7上开发您的应用程序,则无法直接从您的应用程序创建联系人。您需要使用"save contact task“并预先填充所需的字段。下面是一个例子:

代码语言:javascript
复制
SaveContactTask saveContactTask = new SaveContactTask();
saveContactTask.Completed += new EventHandler<SaveContactResult>(saveContactTask_Completed);
saveContactTask.FirstName = "John"; // card.PropertyFromvCard and so on...
saveContactTask.LastName = "Doe";
saveContactTask.MobilePhone = "2065550123";
saveContactTask.Show();

如果你是在Windows phone8上进行开发(考虑到你的问题标签,情况似乎并非如此),你可以创建一个Custom contact store并直接写入其中

2.关于URL的

要知道您是否正在处理URL,我建议您遵循此SO answer中的建议。长话短说,下面是你可以使用的代码,或者至少是类似的代码:

代码语言:javascript
复制
static bool IsValidUrl(string qrString)
{
    Uri uri;
    return Uri.TryCreate(urlString, UriKind.Absolute, out uri)
        && (uri.Scheme == Uri.UriSchemeHttp
         || uri.Scheme == Uri.UriSchemeHttps
         || uri.Scheme == Uri.UriSchemeFtp
         || uri.Scheme == Uri.UriSchemeMailto
            /*...*/);
}

最后,要在web浏览器中打开URL (当然,如果它是有效的),您可以使用WebBrowser task或通过WebBrowser control将真正的WebBrowser嵌入到您的应用程序中,并充分利用它。

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 00:49:07

ZXing有一个名为ResultParser的类,它有一个静态方法parseResult。ResultParser支持一些常见的内容格式,如vCard、vEvent、URL等。因此,它为您提供了一个用于返回vCard内容的AddressBookParsedResult实例。

代码语言:javascript
复制
ParsedResult parsedResult = ResultParser.parseResult(result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19773029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档