这实际上是可能的一个解决方法:
创建一个充当启动器的空活动,称为FakeLauncherActivity.将其添加到清单中作为禁用组件:
android:name="com.path.to.your.FakeLauncherActivity"
android:enabled="false">
检查您所需的启动器活动是否为默认启动器活动(使用您的问题的isMyAppLauncherDefault()).
如果没有,请提供用户选择首选的启动器活动,如下所示:
public static void resetPreferredLauncherAndOpenChooser(Context context) {
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, com.path.to.your.FakeLauncherActivity.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);
}
此方法暂时启用FakeLauncherActivity,这将导致可用的启动器活动集中的更改,这迫使Android忘记其默认启动器.你会看到像…
521-735/system_process I/PackageManager﹕ Result set changed, dropping preferred activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 } type null
…在你的日志中
该方法然后简单地打开一个启动器意图,您可以在其中看到所有安装的启动器和按钮“始终”/“只是一次”.
最后,该方法再次禁用FakeLauncherActivity,使其不显示在列表中.
您可以按照要求频繁重复,只有将所需的启动器活动设置为默认值,才能让用户继续操作.