2

タイトルが示すように、1D バーコードをスキャンしようとしていますが、これまでのところ、次のコードがあります。

public class MainActivity extends Activity {

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

    public void test(View view){

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

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
          switch (requestCode) {
          case IntentIntegrator.REQUEST_CODE:
             if (resultCode == Activity.RESULT_OK) {

                IntentResult intentResult = 
                   IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

                if (intentResult != null) {

                   String contents = intentResult.getContents();
                   String format = intentResult.getFormatName();

                   TextView uno = (TextView) findViewById(R.id.textView1);
                   uno.setText(contents);
                   Toast.makeText(this, "Numero: " + contents, Toast.LENGTH_LONG).show();
                   Log.d("SEARCH_EAN", "OK, EAN: " + contents + ", FORMAT: " + format);
                } else {
                   Log.e("SEARCH_EAN", "IntentResult je NULL!");
                }
             } else if (resultCode == Activity.RESULT_CANCELED) {
                Log.e("SEARCH_EAN", "CANCEL");
             }
         }
    }   
}

そしてもちろん、IntentResult と IntentIntegrator の両方をプロジェクトに追加しました。

そのため、ボタンが押されたときにスキャナーが正しく呼び出され、コードを完全にスキャンしているように見えます (スキャン後に「テキストが見つかりました」と表示されます)。更新され、トーストが表示されません。

間違いが何であるかについて何か考えはありますか?

前もって感謝します!

4

3 に答える 3

3

あなたの最初の間違いは、 を使用せずIntentIntegrator.initiateScan()に、 への手巻き呼び出しに置き換えたことstartActivityForResult()です。

あなたの 2 番目の間違いは、それが であると仮定することIntentIntegrator.REQUEST_CODEです0。そうではない。

したがって、現在のコードでは、リクエスト コード のリクエストを送信していますが、これは のリクエスト コードで0返されていますが、 を探しているだけなので無視しています。onActivityResult()0IntentIntegrator.REQUEST_CODE

test()メソッドの本体を への呼び出しに置き換えるだけinitiateScan()で、より良い状態になるはずです。の使用方法を示すサンプル プロジェクトを次に示しますIntentIntegrator

于 2012-11-25T12:41:58.097 に答える
1

私はあなたの同じ問題を解決します。

public class MainActivity extends Activity {

    private TextView tvStatus, tvResult;

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

        this.tvStatus = (TextView) findViewById(R.id.tvStatus);
        this.tvResult = (TextView) findViewById(R.id.tvResult);

        Button scanBtn = (Button) findViewById(R.id.btnScan);

        scanBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                try {

                    Intent intent = new Intent(
                            "com.google.zxing.client.android.SCAN");
                    intent.putExtra("SCAN_FORMATS", "QR_CODE_MODE");
                    startActivityForResult(intent,
                            IntentIntegrator.REQUEST_CODE);
                } catch (Exception e) {

                    Log.e("BARCODE_ERROR", e.getMessage());
                }
            }
        });
    }

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

        IntentResult scanResult = IntentIntegrator.parseActivityResult(
                requestCode, resultCode, intent);

        if (scanResult != null) {

            this.tvStatus.setText(scanResult.getContents());
            this.tvResult.setText(scanResult.getFormatName());
        }
    }
}
于 2014-01-07T11:06:49.600 に答える
0

onActivityResault 関数をオーバーライドする必要があります。関数宣言の前に @Override を追加するだけで解決されます。

于 2019-11-26T12:21:13.490 に答える