【问题标题】:How to bring up the set default launcher prompt?如何调出设置默认启动器提示?
【发布时间】:2015-01-05 19:51:57
【问题描述】:

我想检测我的启动器应用程序是否是默认启动器,如果不是,则提示让用户选择我的应用程序作为默认启动器。我面临的问题是提示出现时没有“仅一次”和“始终”选项。此外,在我的启动器应用上选择不会设置默认值。

在我的 onCreate 中,我有以下检查以查看我的应用是否是默认启动器,然后我会启动一个有意图的对话框,以便用户可以选择我的应用作为默认启动器。

    if (!isMyAppLauncherDefault()) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(Intent.createChooser(intent, "Set as default to enable Kiosk Mode"));
    }

这是我检查我的应用是否是默认启动器的方法

private boolean isMyAppLauncherDefault() {
    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;   
}

注意:我已尝试更改启动意图的方式(请参阅下面的代码 sn-p)。但是随后启动器根本没有出现。什么都没发生。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

如何让“始终”按钮显示,以及如何设置实际的默认启动器设置。提前谢谢!

【问题讨论】:

标签: android android-intent android-launcher


【解决方案1】:

我面临的问题是提示出现时没有“仅一次”和“始终”选项。

createChooser() 导致了这一点——它是为一次性选择器设计的,没有用于设置默认值的选项。删除您的createChooser() 调用,并使用您构建的Intent。如果没有默认启动器,用户将获得带有“Just Once”和“Always”选项的标准选择器。

但请注意,如果 另一个 启动器是默认启动器,那么您的 Intent 将只会路由到该启动器。在这种情况下,除了指导用户进入“设置”并删除他们对该应用的默认关联之外,您实际上无能为力。

【讨论】:

  • 现在没有启动器。
  • @portfoliobuilder:删除CATEGORY_DEFAULT。这不是主屏幕实现所必需的,并且通过需要它,您正在消除选项。在您的情况下,您需要最通用的 Intent 来代表您可能的选项集,即 ACTION_MAIN/CATEGORY_HOME
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多