再次加载启动器应用程序?

时间:2013-09-09 11:30:10

标签: android android-intent launcher android-launcher

我有一个自定义启动器。当我安装它时,我是第一次打开它并使用以下代码加载启动器的意图选择器:

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);
}

它不起作用。

2 个答案:

答案 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);