在Android中显示错误的默认应用程序列表L
问题描述:
我想要获取Android L中的所有默认应用程序。我使用了波纹管代码,但他们给了我一个错误的解决方案。让我先看看我的代码在Android中显示错误的默认应用程序列表L
private void getMyAppLauncherDefault() {
final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filter);
List<ComponentName> activities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) getPackageManager();
packageManager.getPreferredActivities(filters, activities, null);
for (ComponentName activity : activities) {
Log.d(TAG,"======packet default:==="+activity.getPackageName());
}
}
而这是日志。日志在com.google.android.googlequicksearchbox
和com.vlingo.midas
之间显示错误结果。他们都是语音应用程序,但我默认设置了com.google.android.googlequicksearchbox
。我不知道为什么日志显示com.vlingo.midas
。我该如何解决它?由于
16:02:44.817 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms
16:02:44.827 /com.exam D/Sample: ======packet default:===com.vlingo.midas
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.launcher
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.googlequicksearchbox
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.apps.plus
答
要检查,如果你的应用程序设置为“默认”,那么请试试这个代码:
public static boolean isMyAppDefault(Context context) {
final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filter);
final String myPackageName = context.getPackageName();
List<ComponentName> activities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) context.getPackageManager();
packageManager.getPreferredActivities(filters, activities, null);
for (ComponentName activity : activities) {
if (myPackageName.equals(activity.getPackageName())) {
return true;
}
}
return false;
}
+0
@ user8430如果您有任何问题,请告诉我。 –
+0
我认为你和我有同样的来源。在你的解决方案中,它与我上面的代码类似,只是修改了一些东西。发布前请检查您的解决方案。 – Jame
'com.vlingo.midas'很可能支持一个额外的过滤器,为此它显示出来。用包名称打印相应的过滤器以检查这一点。 – F43nd1r
@ F43nd1r:我们如何打印? “过滤器”大小只是1,而“过滤器”大小是4.但我无法打印过滤器的名称 – Jame
可能是com.vlingo.midas是默认用于不同目的/应用程序。 –