2011-12-27 148 views
1

我能够通过意图调用条形码扫描器,但是当我尝试捕获基于this的扫描返回的值时,尝试构建解决方案时出现以下错误。从条形码扫描获得结果

  • Android.Content.Intent”不包含一个定义‘getStringExtras’和没有扩展方法‘getStringExtras’接受型的第一参数‘Android.Content.Intent’可以找到(是否缺少使用指令或程序集引用?)
  • 名称“RESULT_CANCELED”不在当前情况下存在
  • “RESULT_OK”并不在当前的背景下

这里存在这个名字是我的两个调用代码扫描仪并尝试返回结果。 点击事件在onCreate。 onActivityResult是与scan.Click事件相同的同名类,同一名称空间中的一个方法。

Button scan = (Button)FindViewById(Resource.Id.scan); 
     scan.Click += (o, e) => 
     { 
      Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.SetPackage("com.google.zxing.client.android"); 
      intent.PutExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE"); 
      StartActivityForResult(intent, 0); 
     }; 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    { 
     if (requestCode == 0) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       String contents = intent.getStringExtra("SCAN_RESULT"); 
       String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      } 
      else if (resultCode == RESULT_CANCELED) 
      { 

      } 
     } 
    } 
+0

这种方法可能不是实现此目的的最佳方式,因为如果未安装zxing的条形码扫描程序,您的应用程序将崩溃。 – 2011-12-27 21:39:04

+0

(他只需要捕获ActivityNotFoundException或者首先检查包,或者使用IntentIntegrator - 很容易就不行) – 2011-12-27 22:39:51

回答

5

这里的问题是您的onActivityResult方法尚未从Java正确转换为适用于Android的Mono。

它看起来更像是:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{ 
    if (requestCode == 0) 
    { 
     if (resultCode == Result.Ok) 
     { 
      String contents = data.GetStringExtra("SCAN_RESULT"); 
      String format = data.GetStringExtra("SCAN_RESULT_FORMAT"); 
     } 
     else if (resultCode == Result.Canceled) 
     { 

     } 
    } 
} 

翻译的亮点是:

  1. 正确的签名(并覆盖)为OnActivityResult
  2. 使用Result枚举
  3. 的getStringExtra在Java中的方法是GetStringExtra in C#
+0

就是这样。非常感谢!!! – jmease 2011-12-27 21:40:44

1

尝试使用zxing提供的实用程序类,它可以找到here。如果没有安装Barcode Scanner应用程序,这也可以防止应用程序崩溃。

+0

我很想用这种方式实现,但链接只是一大堆java,你可以告诉它不是我的操舵室。如果有一个monodroid的例子,只需打开扫描仪并使用IntentIntegrator获取结果,将不胜感激。我一直没有找到一个谷歌。 – jmease 2011-12-28 13:58:21