我可以使用以下代码触发启动器选择器弹出窗口,从中我可以选择启动器。但是在华为平板电脑中,此代码无法正常工作
Intent selector = new Intent(Intent.ACTION_MAIN);
selector.addCategory(Intent.CATEGORY_HOME);
selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(selector);
请帮助我!
答案 0 :(得分:0)
解决方案:
这实际上可以通过一些解决方法来实现:
创建一个空的Activity
,用作启动程序FakeLauncherActivity
。将其作为已禁用组件添加到清单中:
<activity
android:name="com.path.to.your.FakeLauncherActivity"
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>
检查您所需的启动器活动是否为默认活动。
如果没有,请让用户选择首选的启动器活动,如下所示:
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
,使其不显示在列表中。
您可以根据需要多次重复该操作,并且仅当您将所需的启动器活动设置为默认值时,才允许用户继续操作。