2010-12-02 13 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に接続します。だから私は、URL =入力intentMarket method.Justで

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();  
    } 

} 

を使用しています「市場://検索をQ =さえずり」 ところで市場はエミュレータにインストールされていませんが。

あなたはこれが役立つ場合

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

について
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(); 
    } 
} 

もっと!

1

私はPackageManagerqueryIntentActivities()を使用して、startActivity()リクエストを処理するものがあるかどうかを判断することをお勧めします。

+0

ありがとうCommonsWare。私はあなたの本を買うでしょう。 –

+0

@raychenon:ありがとう! – CommonsWare

関連する問題