天天看點

隐式調用第三方Activity前判斷Intent

通過Intent的resolveActivity方法,并對包管理器進行查詢以确定是否有Activity能夠啟動該Intent:

                             //  撥打電話

         // Create the implicit Intent to use to start a new Activity.

           Intent intent =  new Intent(Intent.ACTION_DIAL, Uri.parse("tel:2463983"));

// 檢查是否存在能執行該action的activity

.

           PackageManager pm = getPackageManager();

           ComponentName cn = intent.resolveActivity(pm);

           if (cn == null) {

//如果沒有,那麼就去Google Play去找找看

             Uri marketUri =

               Uri.parse("market://search?q=pname:com.myapp.packagename");

             Intent marketIntent = new 

               Intent(Intent.ACTION_VIEW).setData(marketUri);

//如果Google Play上有,那麼就去下載下傳一個APP來

             // capable of performing the required action. Otherwise log an

             if (marketIntent.resolveActivity(pm) != null)

               startActivity(marketIntent);

             else

               Log.e(TAG, "Market client not available.");

           } 

           else 

             startActivity(intent);