【问题标题】:List of default apps showing wrong in Android L在 Android L 中显示错误的默认应用程序列表
【发布时间】:2017-03-22 22:52:09
【问题描述】:

我想在 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.googlequicksearchboxcom.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

更新:有默认应用名称

【问题讨论】:

  • com.vlingo.midas 很可能支持一个额外的过滤器,它会显示出来。使用包名称打印相应的过滤器以检查这一点。
  • @F43nd1r:我们如何打印它? filter 大小仅为 1,而 filters 大小为 4。但我无法打印过滤器的名称
  • 可能是 com.vlingo.midas 是针对不同目的/应用的默认设置。

标签: android android-intent android-5.0-lollipop android-package-managers


【解决方案1】:

要检查您的应用是否设置为“默认”,请尝试以下代码:

 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;
    }

【讨论】:

  • @user8430 如果您有任何问题,请告诉我。
  • 我认为你和我从某人那里得到了相同的来源。在您的解决方案中,它类似于我上面的代码,只需修改一些内容。请在发布前检查您的解决方案。
【解决方案2】:

您在上面添加的代码完全正确。它确实执行了它的意图。

现在您已将com.google.android.googlequicksearchbox 语音应用程序设置为默认值,这就是它显示在日志中的原因。 虽然 com.vlingo.midas 显示可能是因为它被设置为其他类型的默认类别而不是语音。

【讨论】:

  • 你怎么证明?我不这么认为。我检查所有
  • @user8430 我需要尝试一下来证明这一点。我会试一试告诉你
  • 你找到解决方案了吗。我仍然期待您的测试
  • @user8430 我还没有测试过。我一定会尽快尝试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多