Zxing通过意图

时间:2012-06-16 20:19:24

标签: java android android-intent zxing

在我的应用程序中,我使用了zxing库。我通过意图开始de zxing barcodescanner。但是当用户没有安装条形码扫描器时。应用程序停止工作。如何检查是否已安装zxing条码扫描器?

2 个答案:

答案 0 :(得分:4)

zxing wiki上有一个页面明确提到了这个案例:

  

How to scan a barcode from another Android application via Intents

     

集成的最佳方式是使用我们提供的小型代码库。它正确处理了许多细节,例如设置类别,标记,选择最合适的应用程序,以及 最重要的是处理未安装条形码扫描程序的情况

答案 1 :(得分:1)

您可以使用以下代码段来检查用户设备上是否安装了特定的应用程序

try{
    ApplicationInfo info = getPackageManager().
            getApplicationInfo("com.facebook.android", 0 );
    return true;
} catch( PackageManager.NameNotFoundException e ){
    return false;
}

对于特定Zxing,您将使用以下内容。

 Intent intent1 = new Intent("com.google.zxing.client.android.SCAN");
 List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent1,     
            PackageManager.MATCH_DEFAULT_ONLY);    
        if(list.size() > 0)  
                // Zxing is available 
        else  
           // Zxing is not available       

一旦您发现Zxing可用,您可以按如下方式调用

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }
};

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}