【问题标题】:Load launcher app again?再次加载启动器应用程序?
【发布时间】:2013-09-12 21:13:18
【问题描述】:

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

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

它不工作。

【问题讨论】:

    标签: android android-intent launcher android-launcher


    【解决方案1】:

    在这段代码中:

    c.startActivity(selector);
    p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    

    当您调用startActivity() 时,活动不会立即开始。这样做只是告诉 Android 框架,您希望在框架获得控制权的下一个可能时间启动另一个活动。在下一行中,您禁用该组件,以便当 Android 框架开始启动 Activity 时,您的启动器组件已再次被禁用。

    startActivity()的调用不是同步的

    【讨论】:

    • 那么我该如何解决呢?感谢您的建议
    【解决方案2】:

    假设您想在选择器显示后禁用主页活动,以便默认启动器对主页按钮做出反应,直到您启用活动:

    在 startActivity 之后不要禁用你的 home Activity。这应该在您的家庭活动的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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多