2010-12-02 72 views
4

我正在使用意圖通過Twitter客戶端發佈消息。 當手機上沒有Twitter應用程序時,我想將用戶重定向到市場。 但是異常ActivityNotFoundException不起作用。每次(當我沒有Twitter的應用程序),我得到的錯誤我讀ActivityNotFoundException是startActivity及其子異常處理程序「沒有應用程序可執行此操作」Android:我可以使用第三方應用程序的這個意圖嗎?

Intent intentTwitter = new Intent(Intent.ACTION_SEND); 
intentTwitter.putExtra(Intent.EXTRA_TEXT,msg); 
intentTwitter.setType("application/twitter"); 

try{ 
startActivity(Intent.createChooser(intentTwitter,"tweet")); 
}catch(ActivityNotFoundException e){ 
// lead to the app market 
} 

。也許解決方案不在異常處理中。

回答

4

以下是發佈的解決方案。

我使用PackageManager和queryIntentActivities()來指示指定的動作是否可以用作意圖。 該方法向包管理器查詢可以使用指定操作響應意向的電話上已安裝的包。如果找不到包,則該方法返回false。

public static boolean isIntentAvailable(Context context, String action) { 
     final PackageManager packageManager = context.getPackageManager(); 
     final Intent intent = new Intent(action); 
     List<ResolveInfo> list = 
       packageManager.queryIntentActivities(intent, 
         PackageManager.MATCH_DEFAULT_ONLY); 
     return list.size() > 0; 
    } 

這裏是完整的代碼。我使用Twitter客戶端連接到Twitter。所以我使用

public void ConnectTwitter(){ 
    String msg = getResources().getString(R.string.partager_twitter).toString(); 
    Intent intentTwitter = new Intent(Intent.ACTION_SEND); 
    intentTwitter.putExtra(Intent.EXTRA_TEXT,msg); 
    intentTwitter.setType("application/twitter"); 
    if (isIntentAvailable(this,"application/twitter")){ 
     startActivity(Intent.createChooser(intentTwitter,getResources().getString(R.string.partager_sel_tweet))); 
    } 
    else{ 
     /* Handle Exception if no suitable apps installed */ 
     Log.d("twitter", "Catch exception"); 
     new AlertDialog.Builder(PartagerActivity.this) 
     .setTitle(getResources().getString(R.string.partager_sel_tweet)) 
     .setMessage(getResources().getString(R.string.partager_app_download)) 
     .setNegativeButton("Non", null) 
     .setPositiveButton("Oui", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         intentMarket("market://search?q=twitter"); 
        } 
       }) 
     .show();  
    } 

} 

與intentMarket method.Just輸入URL = 「市場://搜Q = Twitter的?」 BTW市場沒有安裝在模擬器。

public void intentMarket (String url){ 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    Uri u = Uri.parse(url); 
    i.setData(u); 
    try{ 
     startActivity(i); 
    } 
    catch(ActivityNotFoundException e){ 
     Toast.makeText(this, "Pas d'applications twitter trouvé.", Toast.LENGTH_SHORT).show(); 
    } 
} 

更多PackageManager http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html

豎起大拇指,如果你有所幫助!

1

我建議使用PackageManagerqueryIntentActivities()來確定是否有東西可以處理您的startActivity()請求。

+0

感謝CommonsWare。我會買你的書。 – 2010-12-03 13:22:50

相關問題