2012-11-25 22 views
2

正如標題所說,我試圖掃描一維條碼,到目前爲止,我還THET下面的代碼:試圖與斑馬線讀取條形碼,但似乎onActivityResult不beeing稱爲

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添加到項目中。

因此,掃描儀在按下按鈕時被正確調用,它似乎完美地掃描代碼(它在掃描它後顯示「發現文本」),但似乎沒有調用onActivityResult,因爲TextView不會更新,Toast也不會出現。

關於錯誤可能是什麼想法?

在此先感謝!

回答

3

你的第一個錯誤是沒有使用IntentIntegrator.initiateScan(),用你自己的手撥號碼替換爲startActivityForResult()

你的第二個錯誤是假定IntentIntegrator.REQUEST_CODE0。不是這樣。

因此,與當前的代碼,你發出與0請求代碼,這是回來onActivityResult()0請求代碼,您所忽略的請求,因爲你只是在尋找IntentIntegrator.REQUEST_CODE

只需將您的test()方法的主體替換爲initiateScan()的調用方法,就可以獲得更好的形狀。 Here is a sample project,演示使用IntentIntegrator

+0

我明白了。此外,這工作完美!感謝您的答案! – Moko

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()); 
     } 
    } 
} 
+0

很好解釋這個變化,但你已經解決了這個片段中的直接問題。 –

+0

這固定了我的頭痛,thx –