Zxing,调用 Fragment 得到 Result

Zxing, call in Fragment and get Result

我遇到以下问题:我试图从片段启动我的扫描仪。但实际上不可能通过此片段中的 onActivityResult 捕获结果。

    @Override
public void onClick(View v){


    IntentIntegrator integrator = new IntentIntegrator(getActivity());

    integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
    integrator.setCaptureActivity(HorizontalActivity.class);
    integrator.setOrientationLocked(false);
    integrator.initiateScan();


}

我也尝试了示例中的代码

IntentIntegrator.forFragment(getActivity())

但我的问题是我使用的是 .v4.App.FragmentActivity 而 Konstruktor 仅适用于 App.Fragment.

也许你能帮帮我?

在你的片段中试试这个....

IntentIntegrator.forFragment(this).initiateScan();
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
               //Cancelled
            } else {
               //"Scanned Result=" + result.getContents()
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }

    }

这是我的解决方案,它可以从 activity 或片段中调用。

fun scanQrCode() {
    var intent = Intent(activity, ScanQrActivity::class.java)
    intent.setAction(Intents.Scan.ACTION);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)

    intent.putExtra(Intents.Scan.PROMPT_MESSAGE, "Scan unit id")
    intent.putExtra(Intents.Scan.CAMERA_ID, 0)
    intent.putExtra(Intents.Scan.BEEP_ENABLED, true)
    intent.putExtra(Intents.Scan.BARCODE_IMAGE_ENABLED, false)
    this.startActivityForResult(intent, 1111)

}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

    if (requestCode.equals(1111)) {
        val contents = data?.getStringExtra(Intents.Scan.RESULT)
        if (contents == null)
            Toast.makeText(activity, "Canceled", Toast.LENGTH_LONG).show()
        else {
            Toast.makeText(activity, contents, Toast.LENGTH_LONG).show()
        }
    }
}