检测一个intent是否有效:
public static boolean isIntentAvailable(Context context, Intent intent) {
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
return list.size() > 0;
}
检测是否有默认程序:
public final boolean hasPreferredApplication(final Context context, final Intent intent) {
PackageManager pm = context.getPackageManager();
ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
return !"android".equals(info.activityInfo.packageName);
}
这里解释一下,如果没有设置默认程序,系统会弹出一个所有支持程序的列表,这个弹出的对话框其实是com.android.internal.app.ResolverActivity,包名是“android”,所以使用“android”字符串判断。