14

インストールされているバーコードリーダーのインテントを呼び出すことで、zxingを使用してコードをスキャンしていますが、ビープ音が鳴り、スキャンが良好であることを示すと、zxingアクティビティが制御を返し、結果を処理できるようになると思いますが、そこにとどまり、スキャンを再試行します。戻るボタンを押す必要があり、それから戻って次のステップを実行できます。スキャナーを呼び出すときに欠落している明らかなフラグはありますか?

どんなアドバイスもありがたく受けました。どうもありがとう。

これが私のコードです:

public boolean onTouchEvent(final MotionEvent event) {

    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
    startActivityForResult(intent, 0);

    return true;
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

            // Handle successful scan

            String s = "http://www.google.com/search?q=";
            s += contents;
            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
            }
        else 
            if (resultCode == RESULT_CANCELED) {
                // Handle cancel
                }
            }
        }
    }
4

5 に答える 5

10

これが私自身の質問に対する完全な答えです。これが誰かに役立つことを願っています:

ここに移動して、IntentIntegratorクラス全体をコピーし、アプリに追加します。また、ここに移動して、IntentResultクラスをアプリにコピーします。次に、これをアクティビティに追加します(または、ボタンなどでスキャンをトリガーします)。

public boolean onTouchEvent(final MotionEvent event) {

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

    return true;
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
      IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
      if (scanResult != null) {
        // handle scan result
          String s = "http://www.google.com/search?q=";
            s += scanResult.getContents();

            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
      }
      // else continue with any other code you need in the method
      //...
    }

バーコードスキャナーアプリが提供するサービスを呼び出すだけで、コードのチャンクをコピーして独自のアプリに貼り付けるのではなく、すばらしい方法でしたが、これが推奨される方法のようです:(

于 2012-06-13T17:26:19.897 に答える
5

IntentIntegrator提供されているクラスを使用してみませんか?これはプロジェクトのドキュメントで言及されている唯一のアプローチですが、それらを見ましたか?https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

インテントの送信と解析の詳細をまとめるために作成したので、タイプミスはありません。たとえば、余分な「com.google.zxing.client.android.SCAN.SCAN_MODE」などはありません。

于 2012-06-13T16:13:44.620 に答える
1

finishActivity(requestCode);を追加します。onActivityResult()メソッドの最後。

これを試してください:onTouchの最初の2行を次のコードに置き換えます。QR以外のコードをスキャンしているときに問題が発生しているようです。スキャンフィルターを取り外して、一度確認してください。

インテントインテント=newIntent( "com.google.zxing.client.android.SCAN"); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

于 2012-06-13T14:08:30.437 に答える
1

同じ問題が発生していたので、SeanOwenが推奨するIntentIntegratorクラスを使用してみました。これがポートレートでバーコードをスキャンしようとしたときにのみ発生していることに気付くまで、私はまだ問題を抱えていました(ほとんどの場合、電話で)。縦向きから横向きに向きを変えると、ダブルスキャンが発生することがわかります。android:configChanges="orientation|keyboardHidden|screenSize"マニフェストのアクティビティに追加することで、これを解決しました。おそらくオリエンテーション1つだけが必要ですが、それはテストされていません。

Adobe AIR Native Extensionを作成するときにこの問題が発生するユーザーの場合は、Androidプロジェクトマニフェストだけでなく、app.xmlのAndroidマニフェスト追加のアクティビティタグにもその行を追加してください。

于 2013-10-08T15:00:57.547 に答える
0

これが私が使用している解決策です。それは私にとってはうまくいっています。

Intent intent = new Intent(SelectOptionActivity.this, CaptureActivity.class);
                intent.putExtra("SCAN_MODE", "ONE_D_MODE");
                intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
                intent.setAction(Intents.Scan.ACTION);
                startActivityForResult(intent, 1);


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 1 && resultCode == RESULT_OK) {
            final String contents = intent.getStringExtra(Intents.Scan.RESULT);
            final String formatName = intent.getStringExtra(Intents.Scan.RESULT_FORMAT);

        }
    }
于 2016-06-20T09:16:03.930 に答える