2011-08-30 53 views
0

我得到了以下問題: 我正在開發一個應用程序,它需要zxing-QR-Code閱讀器正常工作。但是我怎麼知道它是否安裝? 我發現一些代碼,應該可以解決問題,但不會工作,所以我想我可能會問wehere我發現這個代碼:Android意圖(ActionNotFoundException)

/**someQC**/ 
public void function() { 
    if(!isIntentAvailable(this, "com.google.zxing.client.android.SCAN")) { 
        intentNotAvaiable("com.google.zxing.client.android"); //handle no intent 
} 
/**somemoreQC to deal with the intent**/ 


private void intentNotAvaiable(String intentName) { 
     setContentView(R.layout.intentnotavailable); 
     TextView t = new TextView(this); 
     t = (TextView)findViewById(R.id.aint_available); 
     t.setText(intentName + "unbekannt, weiterleitung\n zum AndroidApp Market Place?"); 

     gotoMarketPlace = ("market://search?q=pub:" + intentName); 
    } 

public void goToMarketPlace(View view) { //this is the Button handler 
     Intent promptInstall = new Intent(Intent.ACTION_SEARCH).setPackage("com.android.vending").putExtra("query", gotoMarketPlace); 
     startActivity(promptInstall); 
    } 

所以實際的問題是,當我嘗試啓動市場(通過是的按鈕)該應用程序只是崩潰!

回答

0

使用IntentIntegrator class supplied by ZXing啓動您的掃描,它會檢測到缺少的條碼掃描器應用程序,並會導致用戶下載它。或者,檢查源代碼IntentIntegrator並應用其技術。

+0

我現在試着去適應IntentIntegrator,我只是不想c&p,但是我完全被這個混淆了:'public static final Method PACKAGE_SETTER; static { Method temp; 嘗試temp = Intent.class.getMethod(「setPackage」,new Class [] {String.class}); (NoSuchMethodException nsme){ temp = null; } PACKAGE_SETTER = temp; }' – Sim

+0

@Sim:'setPackage()'是在Android 2.1左右添加的。他們希望在可用的情況下使用該方法,但如果他們直接引用它,他們的代碼會在較早的Android設備上崩潰。反射是在保持向後兼容性的同時使用更新的Android功能的一種方式。 – CommonsWare

+0

我現在成功地適應了,但即使我安裝了條碼掃描器,我仍然得到了Activity Invalid intent = new Intent(「com.google.zxing.client.android.SCAN」)。addCategory(Intent.CATEGORY_DEFAULT).putExtra ( 「SCAN_FORMATS」, 「QR_CODE_MODE」); activity.startActivityForResult(inte,42);' – Sim

0

要查看掃描儀應用程序是否可用,請通過PacketManager進行搜索。

PacketManager pm = this.getPacketManager(); 
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
return list.size() > 0; 

在這個例子的目的是:

Intent i = new Intent("com.google.zxing.client.android.SCAN"); 

啓動市場,如果應用程序無法使用,我會這樣走過來的URI應用。正如我所知道的Uri的「市場:// *」-prefix將始終在marketapp中重定向。

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.zxing.client.android")); 
startActivity(i); 

這有助於。