簡體   English   中英

Android:我可以從第三方應用程序中使用此意圖嗎?

[英]Android : Can I use this intent from a 3rd party application?

我正在使用意圖通過Twitter客戶端發布消息。 當手機上沒有Twitter應用程序時,我想將用戶重定向到市場。 但是異常ActivityNotFoundException不起作用。 每次(當我沒有Twitter應用程序時)我收到錯誤“沒有應用程序可以執行此操作”

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
}

我讀ActivityNotFoundException是startActivity及其子代的異常處理程序。 也許解決方案不在異常處理中。

這是解決方案。

我使用PackageManager和queryIntentActivities()來指示指定的操作是否可以用作intent。 該方法向包管理器查詢電話上已安裝的包,這些包可以響應具有指定操作的意圖。 如果未找到任何包,則該方法返回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方法。只需輸入url =“market:// search?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

如果您覺得有用,請豎起大拇指!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM