2011-10-11 65 views

回答

18

我在我的應用程序中這樣做了,它需要安裝zxing掃描儀應用程序。 裏面,你會想這是你的onclick或ontouch:

try{ 
    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.setPackage("com.google.zxing.client.android"); 
    startActivityForResult(intent, 0); 
} catch (Exception e) { 
    createAlert("Barcode Scanner not installed!", "This application uses " + 
    "the open source barcode scanner by ZXing Team, you need to install " + 
    "this before you can use this software!", true); 
} 

其整理出所有的代碼出來後調用

public void createAlert(String title, String message, Boolean button) { 
    // http://androidideasblog.blogspot.com/2010/02/how-to-add-messagebox-in-android.html 
    AlertDialog alertDialog; 
    alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(title); 
    alertDialog.setMessage(message); 
    if ((button == true)) { 
     alertDialog.setButton("Download Now", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       Intent browserIntent = new Intent(
        Intent.ACTION_VIEW, 
        Uri.parse("market://search?q=pname:com.google.zxing.client.android")); 
       startActivity(browserIntent); 
      } 
     }); 
    } 
    alertDialog.show(); 
} 

然後我意識到你要求它在同時安裝你的應用程序。不知道是否應該發佈此代碼,但它可能有幫助

+3

我不認爲你應該只是捕捉一個有點廣泛的「異常」,捕捉實際的異常實例可能會更好。 – AGrunewald

+1

@AGrunewald我完全同意! :)有時我只是特別懶惰 – TerryProbert

5

開始從這個:

Intent mediaIntent = new Intent("com.example.intent.action.NAME"); 
// add needed categories 
List<ResolveInfo> listResolveInfo = getPackageManager().queryIntentServices(mediaIntent, 0); 
if (listResolveInfo.size() != 0) { 
    //normal behavior 
} else { 
    //install what you need 
} 

我給你舉例查詢服務。如果你想檢查活動,那麼你將調用queryIntentActivities()。

8

簡短回答:不,您不能自動安裝其他應用程序作爲依賴關係。

較長的答案:

Android電子市場不會讓你申報其他應用程序安裝的依賴。作爲一個系統,Market似乎是爲單一應用程序安裝而設計的 - 而不是Linux發行版風格的超大型依賴關係圖。

運行,您可以測試用於安裝的應用程序和踢你的用戶轉移到市場,如果這樣。請參閱@QuickNick建議的技術(測試是否安裝了應用程序)和@TerryProbert(投放市場),如果這是您想要的。

最好的辦法可能是設計你的應用程序,如果依賴關係不可用,請優雅地降級,並建議(或堅持)他們前往市場安裝它們。

2

這裏是我用來返回第一個存在的任務活動:

   try { 
       Class<?> missionClass = Class.forName(mPackageName+".Mission"+mission); 
         Method missionDescription; 
         missionDescription = missionClass.getMethod("missionDescription"); 
         mMissionDescription = (String) missionDescription.invoke(null); 
         if (mMissionDescription.length() > 0) { 
          nextMission = mission; 
          break; 
         } 
        } catch (Exception e) { 
         //DEBUG*/Log.v(this.getClass().getName(), "onResume: Mission no "+mission+" not found: "+e.getMessage()); 
        } 

每個任務是在一個單獨的類舉行,從任務基類派生。派生類被稱爲Mission1,Mission24等。

並非所有的任務都被定義。

基類有一個抽象類missionDescription,它返回描述任務的字符串。

此代碼位於循環內,因此測試任務= 1至99,嘗試調用missionDescription。當返回找到的第一個任務的描述時它會返回。

相關問題