【问题标题】:Zxing QR scanner onActivityResult not called in fragment [duplicate]Zxing QR扫描仪onActivityResult未在片段中调用[重复]
【发布时间】:2019-04-29 22:49:18
【问题描述】:

我正在使用zxing android 扫描二维码。

在 onCreateView 中初始化 HomeFragment 中的扫描对象:

//intializing scan object
//qrScan = new IntentIntegrator(this.getActivity()); // this is for activity
qrScan = IntentIntegrator.forSupportFragment(this); // this is for fragment

要获得扫描结果:

// Get the results:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
    if(result.getContents() == null) {
        Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
    }
} else {
    super.onActivityResult(requestCode, resultCode, data);
}

但是,我得到:

错误:HomeFragment 中的 onActivityResult(int,int,Intent) 不能 覆盖片段中的 onActivityResult(int,int,Intent) 试图 分配较弱的访问权限;是公开的

将其从“受保护”更改为公开后,在 HomeFragment 中没有调用 onActivityResult。

【问题讨论】:

  • 您是否在托管 Activity 中覆盖了 onActivityResult()?如果是这样,您是否在那里调用super 方法?
  • 谢谢 Mike M。我错过了在 Activity 中调用 super 方法。能够抓取二维码内容。但是我很难扫描一个简单的二维码(“hello world android”文本),有什么方法可以提高捕获速度吗?我在 AndroidManifest.xml 中添加了 "android:hardwareAccelerated="true"" 但它仍然很慢。
  • 抱歉,这是一个单独的问题。我没用过ZXing。我刚刚检查了您关于Fragment 结果问题的问题。
  • 谢谢@MikeM。发现是调试器造成的。现在运行顺利

标签: android zxing


【解决方案1】:

试试这个

IntentIntegrator scanIntegrator = IntentIntegrator.forSupportFragment(YourFragmentClass.this);
scanIntegrator.setPrompt("Scan");
scanIntegrator.setBeepEnabled(true);
scanIntegrator.setBarcodeImageEnabled(true);
scanIntegrator.initiateScan();

然后在onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (scanningResult != null) {
        if (scanningResult.getContents() != null) {
            scanContent = scanningResult.getContents().toString();
            scanFormat = scanningResult.getFormatName().toString();
        }

        Toast.makeText(getActivity(), scanContent + "   type:" + scanFormat, Toast.LENGTH_SHORT).show();

        textView.setText(scanContent + "    type:" + scanFormat);

    } else {
        Toast.makeText(getActivity(), "Nothing scanned", Toast.LENGTH_SHORT).show();
    }
}

你可以查看thisrepo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多