从条形码扫描中获取结果

时间:2011-12-27 20:50:53

标签: android xamarin.android zxing

我可以通过意图调用条形码扫描程序,但是当我尝试捕获基于this的扫描返回的值时,在尝试构建解决方案时出现以下错误。

  • Android.Content.Intent'不包含'getStringExtras'的定义,并且没有扩展方法'getStringExtras'接受类型'Android.Content.Intent'的第一个参数可以找到(你是否缺少using指令或者装配参考?)
  • 当前上下文中不存在名称“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)
            {

            }
        }
    }

2 个答案:

答案 0 :(得分:5)

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

看起来应该更像:

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. 的正确签名(和覆盖)
  3. 使用Result枚举
  4. Java中的getStringExtra方法是C#
  5. 中的GetStringExtra

答案 1 :(得分:1)

尝试使用zxing提供的实用程序类,可以找到here。如果未安装条形码扫描器应用程序,这还可以防止您的应用程序崩溃。