android - Activity-Alias 在应用更新时被移除

标签 android android-activity android-manifest android-activity-alias

我已经实现了两个 activity-alias,用户应该能够在运行时启用或禁用它们。

<activity-alias
    android:name=".ui.alias.open_location"
    android:targetActivity=".ui.activity.location"
    android:enabled="false">

    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity-alias>

我不希望一开始就启用它们,以免弄乱用户设备的应用程序屏幕。但在运行时,用户应该能够启用别名。我通过 PackageManager 做到这一点:

PackageManager pm  = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName(context, ".ui.alias.open_location");
pm.setComponentEnabledSetting(componentName,
                              PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                              PackageManager.DONT_KILL_APP);

这在开始时就像魅力一样,但是当我安装了我的应用程序的更新时,别名再次被禁用。如何防止系统通过 list 覆盖启用状态?我不希望用户一开始就使用 Launcher,也不希望用户在更新后重新创建所有别名快捷方式。

我想我需要类似于 PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER 的东西,但仅限于启用状态。

谢谢!

最佳答案

所有启用或禁用组件的配置都保存在设备的这个路径中(0为设备的第一个用户):

/data/system/user/0/package-restrictions.xml

XML 的格式是这样的(您只能从 Root设备中提取文件):

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<package-restrictions>
    <pkg name="com.example.myapplication">
        <enabled-components>
            <item name="com.example.myapplication.ActivityAlias" />
        </enabled-components>
    </pkg>
    <preferred-activities />
    <persistent-preferred-activities />
    <crossProfile-intent-filters />
</package-restrictions>

当您更新应用程序时,启用或禁用的组件保持不变,即使您清除了应用程序的数据。

此设置丢失的唯一情况是包名称或组件名称更改时。

我认为您的问题是由于组件名称的更改(可能是 ProGuard/DexGuard 的一些奇怪配置),因为您无法在 play store 上上传具有不同包名称的更新。

您可以尝试反编译APK并验证两个应用中的组件名称是否相同。

关于android - Activity-Alias 在应用更新时被移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519799/

相关文章:

Android Bundle getExtras 与日历对象

Android Activity 无法解析符号 ACCESS_BACKGROUND_LOCATION

java - 一个 Android 应用程序、一个启动 View 、两个图标

在某些设备上,Android 深层链接将转到 PlayStore 而不是我的应用

android - 如何处理 android 中 TabLayout 中的重叠 fragment ?

android - Android beta测试如何应对不同后端环境?

android - 无法将 math.h 放入命名空间

android - 如何解决明显错误?

Android 数据绑定(bind) build.gradle 同步问题?

java - 在约束布局中嵌套