刚看到一篇博文,提到验证是否有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-