【问题标题】:Getting Result From Barcode Scan从条码扫描中获取结果
【发布时间】:2011-12-27 20:50:52
【问题描述】:

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

  • Android.Content.Intent 不包含“getStringExtras”的定义,并且找不到接受“Android.Content.Intent”类型的第一个参数的扩展方法“getStringExtras”(您是否缺少 using 指令或程序集参考?)
  • 当前上下文中不存在名称“RESULT_CANCELED”
  • 当前上下文中不存在名称“RESULT_OK”

这是我调用扫描仪和尝试返回结果的代码。 点击事件在 onCreate 中。 onActivityResult 是与scan.Click事件在同一个.cs、同一个类、同一个命名空间中的方法。

    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)
            {

            }
        }
    }

【问题讨论】:

  • 这种方法可能不是最好的实现方式,因为如果没有安装zxing的条码扫描器,你的应用会崩溃。
  • (他只需要先捕获 ActivityNotFoundException 或检查包,或使用 IntentIntegrator ——很容易不被绊倒。)

标签: android xamarin.android zxing


【解决方案1】:

这里的问题是您的 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. Java 中的 getStringExtra 方法在 C# 中是 GetStringExtra

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我很想以这种方式实现,但链接只是一大堆 java,你可以看出它不是我的驾驶室。如果有一个仅打开扫描仪并使用 IntentIntegrator 获取结果的 monodroid 示例,将不胜感激。我在谷歌上找不到。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2021-12-18
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多