QRCode ZXing示例

时间:2013-11-04 17:05:07

标签: c# windows-phone-7 zxing

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

Xzing示例仅打印到捕获的qr字符串的视频, 我需要一个示例,说明如何理解此字符串是否为vcard,并因此将其保存为联系人,或者如果它是链接并在浏览器中打开它。

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 */
    }

2 个答案:

答案 0 :(得分:0)

显然你必须首先解析qrString内容以获得你想要的东西,我想我们都会同意这一点;)

所以主要问题是:

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

1。关于vCard

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

对于Windows Phone 7,没有用于解析vCard的内置功能,因此您必须自己动手,或者尝试使用vCard library For Windows Phone。它将以这种方式使用:

   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 Phone 8,内置ContactInformation.ParseVcardAsync方法可以帮助您解析qrString内容(此处为官方tutorial

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

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

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 Phone 8上进行开发(并且考虑到你的问题标签似乎并非如此),你可以创建一个Custom contact store并直接写入其中

2。关于网址

要知道您是否正在处理网址,我建议您按照此SO answer的建议进行操作。总而言之,这里是您可以使用的代码或至少类似的代码:

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
            /*...*/);
}

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

答案 1 :(得分:0)

ZXing有一个名为ResultParser的类,其静态方法为parseResult。 ResultParser支持一些常见的内容格式,如vCard,vEvent,URL等。 它会为您提供vCard内容的AddressBookParsedResult实例。

ParsedResult parsedResult = ResultParser.parseResult(result);