首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示默认的启动器选择器?

如何显示默认的启动器选择器?
EN

Stack Overflow用户
提问于 2019-02-13 23:19:39
回答 1查看 338关注 0票数 2

我正在创建一个启动器应用程序,我想手动显示默认的启动器选择器。

我已经找到并尝试了this,但这并不完美,因为我不能立即选择ALWAYS。选择启动器后,我需要按下主页按钮才能选择ALWAYS。

这是我的代码:

代码语言:javascript
复制
public static void resetPreferredLauncherAndOpenChooser(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ComponentName componentName = new ComponentName(context, DefaultLauncherHelperActivity.class);
    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

    Intent selector = new Intent(Intent.ACTION_MAIN);
    selector.addCategory(Intent.CATEGORY_HOME);
    selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(selector);

    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
}

下面是清单:

代码语言:javascript
复制
<activity
        android:name=".activities.MainActivity"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.HOME"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
<activity
        android:name=".activities.DefaultLauncherHelperActivity"
        android:enabled="false">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

这是我得到的(左)与我试图实现的(右)

由于微软的启动器和poco启动器能够做到这一点,所以必须有一种方法,但我找不到解决方案,不幸的是,没有具有相同功能的开源启动器。有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-26 23:16:09

对于这一点,没有直接可用的API。但是,在重置首选启动器之前调用下面的代码将导致选择器对话框按照右侧图像显示。

谨慎使用它,,因为调用它实际上会重置用户的家庭应用程序偏好,并且在你的家庭应用程序之外也可以看到效果。

代码语言:javascript
复制
try {
      IntentFilter intentFilter = new IntentFilter();
      intentFilter.addAction(Intent.ACTION_MAIN);
      intentFilter.addCategory(CATEGORY_HOME);
      intentFilter.addCategory(CATEGORY_DEFAULT);
      Intent intent1 = new Intent(Intent.ACTION_MAIN);
      intent1.addCategory(CATEGORY_HOME);
      intent1.setComponent(null);
      Class<?> clazz = Class.forName("android.app.AppGlobals");
      Class.forName("android.content.pm.IPackageManager")
           .getMethod("setLastChosenActivity", new Class[] { Intent.class, String.class, int.class, IntentFilter.class, int.class, ComponentName.class })
                .invoke(clazz.getMethod("getPackageManager", new Class[0]).invoke(clazz, null),
                    new Object[] { intent1, intent1.resolveTypeIfNeeded(context.getContentResolver()), Integer.valueOf(65536), intentFilter, Integer.valueOf(1081344), intent1.getComponent() });
} catch (Exception ignore) {
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54673590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档