剛看到一篇博文,提到驗證是否有APP可以接受一個Intent,這樣可以在發送Intent前,避免發送的Intent沒有能夠接收的APP,導致FC。
因爲沒有這個習慣~,所以特意試了一下。
核心代碼:
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
寫了個小demo來測試。
//add button to response action
bt.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// intent content
Intent intent = new Intent(Intent.ACTION_DIAL,null);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activitis = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activitis.size()>0;
//Log to show results
Log.d(TAG,"isIntentSafe:"+isIntentSafe);
}
});
這個方法之前用過,用PackageManager來獲取所有APP,所以在知道方法有效的基礎上主要試一下哪些Intent可以用來判斷,哪些不行。
PS:用PackageManager來獲取所有APP:
Intent intent = new Intent(Intent.ACTION_MAIN,null);
所以只要在AndroidMainfest.xml中註冊了intent-filter action的Activity都可以被篩選出來,那些不會被用來註冊的功能性的intent就無法被獲取,比如action_send,action_view這些。
-That’s all-