我有一个自定义启动器。当我安装它时,我是第一次打开它并使用以下代码加载启动器的意图选择器:
Intent localIntent = new Intent(Intent.ACTION_MAIN);
localIntent.addCategory(Intent.CATEGORY_HOME);
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(localIntent);
我的应用将显示所有发射器。然后我选择另一个启动器,即启动器启动器,并将其设置为默认值。然后,下次运行上面的代码时,意图选择器不会出现,我无法更改默认启动器。以下是我试图解决的问题:
private void callIntenChoiceLauncher(Context c)
{
PackageManager p = getPackageManager();
ComponentName cN = new ComponentName(c, RunDefaultLauncher.class);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent selector = new Intent(Intent.ACTION_MAIN);
selector.addCategory(Intent.CATEGORY_HOME);
c.startActivity(selector);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
它不起作用。
答案 0 :(得分:1)
在此代码中:
c.startActivity(selector);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
当您致电startActivity()
时,活动不会立即开始。这样做只是告诉Android框架你想在框架获得控制的下一个可能的时间开始另一个活动。在下一行中,您将禁用该组件,以便在Android框架启动活动时,您的启动器组件已再次被禁用。
对startActivity()
的调用不是同步。
答案 1 :(得分:0)
假设您想在显示选择器后禁用您的家庭活动,以便默认启动器将对主页按钮作出反应,直到您启用您的活动:
请勿在startActivity之后禁用您的家庭活动。这应该在您的家庭活动的onDestroy()
方法中完成。
修改您家庭活动的onCreate()
:
public void onCreate(Bundle savedInstanceState) {
/*check some flag in sharedPreferences or elsewhere
to determine if the activity was launched as part of the chooser process
*/
finish();
}
将onDestroy()添加到您的家庭活动中:
public void onDestroy() {
//Disable the activity again
PackageManager p = getPackageManager();
ComponentName cN = new ComponentName(c, RunDefaultLauncher.class);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
如果您不想在显示选择器后禁用您的家庭活动,只需不要拨打p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);