user3345767 user3345767 - 4 months ago 13
Android Question

Barcode scanning doesn't work if device doesn't have barcode reader app installed

i try to create barcode reader i used Zxing library and i have a problem
divice witch has own barcode reader - my app working perfect but divice witch has not barcode reader app my app does not working
this is a my code
how i can check if divice has barcode reader?

public class MainActivity extends Activity {
TextView tvStatus;
TextView tvResult;
private static String BarCodeResult;

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

tvStatus = (TextView) findViewById(R.id.tvStatus);
tvResult = (TextView) findViewById(R.id.tvResult);
BarCodeResult = tvResult.getText().toString();

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_MODE", "QR_CODE_MODE,PRODUCT_MODE");
startActivityForResult(intent, 0);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplicationContext(), "ERROR:" + e, 1)
.show();

}

}
});

}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
tvStatus.setText(intent.getStringExtra("SCAN_RESULT_FORMAT"));
tvResult.setText(intent.getStringExtra("SCAN_RESULT"));
connectWithHttpGet(intent.getStringExtra("SCAN_RESULT"));
BarCodeResult=intent.getStringExtra("SCAN_RESULT");

Intent in = new Intent(getApplicationContext(), Result.class);
in.putExtra("KEY_BarCodeResult", intent.getStringExtra("SCAN_RESULT"));

startActivity(in);
} else if (resultCode == RESULT_CANCELED) {
tvStatus.setText("Press a button to start a scan.");
tvResult.setText("Scan cancelled.");
}
}
}

Answer

You aren't handling the case where the app is not installed, yes, and there is nothing available to handle the Intent.

Just use the IntentIntegrator class from the project in your app, which handles this:

https://github.com/zxing/zxing/blob/4fb569cce8de8e7724b39cf3f62350441a559771/android-integration/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java

Or you can see what it does and do something similar with ActivityNotFoundException.