【问题标题】:How to reset default launcher/home screen replacement?如何重置默认启动器/主屏幕更换?
【发布时间】:2013-03-21 00:47:58
【问题描述】:

当用户点击主页时,他可以选择启动器,他还可以选择是否将其设置为默认值。问题是之后就很难再改了。

为了解决这个问题,我添加了一个触发此问题的“重置首选启动器”:

getPackageManager().clearPackagePreferredActivities(getPackageName());

但是,如果他选择了我的启动器,此行只会重置首选启动器。我需要一个 sn-p 来清除首选启动器,因此下次用户单击主页时,他会再次获得选项。

【问题讨论】:

    标签: java android launcher homescreen


    【解决方案1】:

    这不是直接可能的,Android 开发人员表示他们不希望任何应用改变用户的偏好。但是,根据 Android 如何维护这些首选项,有一种解决方法。

    让你的清单看起来像这样:

        <activity
            android:name="MyLauncherActivity"
            android:exported="true" />
    
        <activity-alias
            android:name="LauncherAlias1"
            android:targetActivity="MyLauncherActivity" >
            <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-alias>
    
        <activity-alias
            android:name="LauncherAlias2"
            android:enabled="false"
            android:targetActivity="MyLauncherActivity" >
            <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-alias>
    

    为简单起见,我省略了与手头任务无关的其他属性。

    无论如何,一旦您的清单看起来像这样,您就可以使用如下代码清除默认启动器:

        PackageManager pm = getPackageManager();
        ComponentName cn1 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias1");
        ComponentName cn2 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias2");
        int dis = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
        if(pm.getComponentEnabledSetting(cn1) == dis) dis = 3 - dis;
        pm.setComponentEnabledSetting(cn1, dis, PackageManager.DONT_KILL_APP);
        pm.setComponentEnabledSetting(cn2, 3 - dis, PackageManager.DONT_KILL_APP);
    

    通过启用一个别名并禁用另一个别名,您会导致 Android 将用户的选项视为已更改,就像您安装了一个启动器并卸载了另一个启动器一样。因此,用户下次按下主页按钮时将被要求再次选择。无论哪个启动器是当前默认启动器,这种方法都有效。

    【讨论】:

    • 我理解 Android 开发者不希望应用程序改变用户偏好,但缺乏管理首选应用程序的中心位置实在是太荒谬了
    • 我比较同意,但是除了 root 设备之外,没有什么可做的。
    • 我做了更多的测试(为主题添加了一个白色背景)并且主题正在工作,因为我看到了白色背景但是动画不是(活动只是淡入淡出)。我不知道为什么会这样
    • 我删除了其中一个别名,然后我切换了活动本身和别名 2 的启用/禁用。它似乎已经解决了这个问题。
    • 嗯。我总是启用实际活动,这样如果有任何其他组件需要与它通信,它就不必确定启用了哪个组件。但如果这对你有用... = )
    【解决方案2】:

    别名活动会导致一些问题,例如您的启动器在选择默认启动器时会提供两个条目。

    以下是我的解决方案,它对我有用。 how to make the Launcher-Pick-Up popup window showing?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多