1

他の何人かがこの問題を抱えていることは知っていますが、私は解決策に従いましたが、それでもうまくいきません。

新しいアプリケーションを作成しました。1つのアクティビティに1つのボタン(スキャンボタン)と2つのテキストビュー(Zxingが現在返すフォーマット名とコンテンツを出力するだけです)があります。

ScanningViaIntentチュートリアルに従いましたが、ヒットしていないようです。onActivityResult

以下は私のコードです:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final IntentIntegrator integrator = new IntentIntegrator(this);
    Button btnScan = (Button) findViewById(R.id.button1);
    btnScan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            integrator.initiateScan();
        }
    });
}

public void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
    Log.i("result", "hit line");
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

    TextView tv1 = (TextView) findViewById(R.id.textView1);
    TextView tv2 = (TextView) findViewById(R.id.textView2);

    if(scanResult != null)
    {
        System.out.println("format: " + scanResult.getFormatName());
        System.out.println("contents: " + scanResult.getContents());



        tv1.setText(scanResult.getFormatName());
        tv2.setText(scanResult.getContents());
    }
    else
    {
        tv1.setText("ERROR");
    }
}

TextView1が「エラー」と言うことはないので、scanResultがnullであるとは思われず、Log.i()行がヒットすることonActivityResultはないので、ヒットすらされていないと思います。

finalOnClick()メソッドのIntentIntegratorを作成することと関係がありますか?OnClick()内にIntentIntegratorを作成したとき、getParent()を使用してActivityをコンストラクターに渡しましたが、この強制により、IntentItegrator内のNullReferenceExceptionでアプリが閉じられました。

ライブラリを正しく使用していますか?

御時間ありがとうございます、

ポンチョ

4

3 に答える 3

1

onActivityResult()を実装しているため、実際にはメソッドをオーバーライドしていませんOnActivityResult()。結果として、メソッドは呼び出されていません。他のすべてはほぼ正しいように見えます。

これは、注釈を使用する場合に検出される種類のものです。これは検出される@Overrideため、良い習慣です。

于 2012-11-22T16:26:54.980 に答える
0

リポジトリから最新のクラスを取得する必要があります https://github.com/zxing/zxing/tree/master/android-integration/src/main/java/com/google/zxing/integration/android

使用方法については、クラスの javadoc を参照してください。最初にインテントを呼び出すコードを追加します。

IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.initiateScan();

次に、これを Activity に追加して、結果を処理します。

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode,      intent);
    if (scanResult != null) {
        // handle scan result
    }
    // else continue with any other code you need in the method
}

詳細はこちらhttps://github.com/zxing/zxing/wiki/Scanning-Via-Intent

于 2014-06-18T23:40:27.743 に答える
0

どこに電話していstartActivityForResult(..)ますか?次のようなものを使用することをお勧めします。

Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);

// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
  // set the desired barcode types
  StringBuilder joinedByComma = new StringBuilder();
  for (String format : desiredBarcodeFormats) {
    if (joinedByComma.length() > 0) {
      joinedByComma.append(',');
    }
    joinedByComma.append(format);
  }
  intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
}

String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
  return showDownloadDialog();
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);

findTargetAppPackage :

 private String findTargetAppPackage(Intent intent) {
    PackageManager pm = activity.getPackageManager();
    List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    if (availableApps != null) {
      for (ResolveInfo availableApp : availableApps) {
        String packageName = availableApp.activityInfo.packageName;
        if (targetApplications.contains(packageName)) {
          return packageName;
        }
      }
    }
    return null;
  }

より完全な例を見るには、ここにアクセスしてください。

于 2012-11-22T12:49:50.270 に答える