添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am developing a buissness-application that is essentially a Home-screen, and is supposed to be used as a Default Homescreen (being a "kiosk"-application).

Is there any way of checking if my Launcher is the default Launcher? Thanks!

Similar example, but for checking GPS-settings

LocationManager alm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
    Stuffs&Actions;

You can get list of preferred activities from PackageManager. Use getPreferredActivities() method.

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;
                Works fine. I used the package name as third parameter and then checked the length of the activities list. If it is 0, means not launcher.
– Mister Smith
                Sep 25, 2013 at 16:01
                The documentation for getPreferredActivities suggests that the first argument should be an empty list that is populated by the method. What exactly is the behavior when you are giving a list that is already populated as in your example?
– achoo5000
                Feb 1, 2014 at 20:50
                I checked the android source code. There is no effect from adding a filter as you do in your example. I believe a better way to check for a default activity is to use resolveActivity as in this answer to a similar question.
– achoo5000
                Feb 1, 2014 at 21:34
                How would you find all of the preferred activities for all of the intents that have them? You would need to go over all of the apps, prepare a filter for each intent on the app's manifest, and then use this method?
– android developer
                Aug 26, 2014 at 23:22
boolean isHomeApp() {
    final Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    final ResolveInfo res = getPackageManager().resolveActivity(intent, 0);
    if (res.activityInfo != null && getPackageName()
            .equals(res.activityInfo.packageName)) {
        return true;
    return false;
val Context.isMyLauncherDefault: Boolean
  get() = ArrayList<ComponentName>().apply {
    packageManager.getPreferredActivities(
      arrayListOf(IntentFilter(ACTION_MAIN).apply { addCategory(CATEGORY_HOME) }),
      this,
      packageName
  }.isNotEmpty()