如何检查我的应用程序是否是默认启动器

Dag*_*agW 17 android launcher homescreen

我正在开发一个基本上是主屏幕的buissness应用程序,它应该被用作默认主屏幕(作为"自助服务终端"应用程序).

有没有办法检查我的启动器是否是默认的启动器?谢谢!

PS.类似的例子,但用于检查GPS设置

LocationManager alm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
    Stuffs&Actions;
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*tov 28

您可以从中获取首选活动列表PackageManager.使用getPreferredActivities()方法.

boolean isMyLauncherDefault() {
    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 = getPackageName();
    List<ComponentName> activities = new ArrayList<ComponentName>();
    final PackageManager packageManager = (PackageManager) getPackageManager();

    // You can use name of your package here as third argument
    packageManager.getPreferredActivities(filters, activities, null);

    for (ComponentName activity : activities) {
        if (myPackageName.equals(activity.getPackageName())) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 我检查了android [源代码](https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/pm/PackageManagerService.java#L10179).添加过滤器没有像示例中那样有效.我相信检查默认活动的更好方法是使用[resolveActivity](http://developer.android.com/reference/android/content/pm/PackageManager.html#resolveActivity%28android.content.Intent,%20int %29)如[本答案](http://stackoverflow.com/a/6832568/697611)中的类似问题. (5认同)
  • [getPreferredActivities]的文档(http://developer.android.com/reference/android/content/pm/PackageManager.html#getPreferredActivities%28java.util.List%3Candroid.content.IntentFilter%3E,%20java.util.列表%3Candroid.content.ComponentName%3E,%20java.lang.String%29)建议第一个参数应该是由该方法填充的空列表.当您提供已在示例中填充的列表时,行为究竟是什么? (2认同)