更改主活动的活动别名后,应用程序图标将在应用程序更新后被删除



我正在使用活动别名来支持特定设备的不同应用程序图标,代码如下:

    <activity-alias
        android:name=".MainActivity-Vendor"
        android:enabled="false"
        android:icon="@mipmap/app_logo_vendor"
        android:label="@string/app_name_vendor"
        android:exported="true"
        android:targetActivity=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

----- 定义主活动应用程序图标和文本:

  <activity
        android:name=".MainActivity"
        android:icon="@mipmap/app_logo"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

直到 Android 7.0 之前它工作正常,但是当我将我的应用程序定位到 Android 8.0 时,其中连字符 (-( 不支持活动别名,所以我更改了活动别名名称,如下所示,

MainActivity-Vendor ---> MainActivityVendor

我还根据设备供应商更改了启用/禁用的活动别名代码,如下所示:

旧代码 :

    PackageManager pm = this.getPackageManager();
    // Enable/disable activity-aliases
    pm.setComponentEnabledSetting(
            new ComponentName(this, "com.app.MainActivity-Vendor"),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP
    );
    int enabled = pm.getComponentEnabledSetting(new ComponentName(this, "com.app.MainActivity"));

    pm.setComponentEnabledSetting(
            new ComponentName(this, "com.app.MainActivity"),
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP
    );

新代码 :

    PackageManager pm = this.getPackageManager();
    // Enable/disable activity-aliases
    pm.setComponentEnabledSetting(
            new ComponentName(this, "com.app.MainActivityVendor"),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP
    );
    int enabled = pm.getComponentEnabledSetting(new ComponentName(this, "com.app.MainActivity"));

    pm.setComponentEnabledSetting(
            new ComponentName(this, "com.app.MainActivity"),
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP
    );

请注意,在上面,我也更改了代码,

MainActivity-Vendor ---> MainActivityVendor

但是在应用程序升级后,应用程序图标对用户消失了。 并且在应用程序升级后,用户不会获得应用程序的"打开"选项。请帮助我如何解决此问题。

虽然我没有找到确切的解决方案,但我设法通过执行以下操作来实现这一点:

     <receiver android:name=".AppUpdateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
    </receiver>

然后在 AppUpdateReceiver 类中启用/禁用处理活动别名。

  public void onReceive(Context context, Intent intent) {
    //Toast.makeText(context, "Gaana App updated : " + intent.getAction(), Toast.LENGTH_SHORT).show();
    //Log.v(TAG, "app is updated - " + intent.getAction());
    mContext = context;
    if(intent.getAction() != null && intent.getAction().equals("android.intent.action.MY_PACKAGE_REPLACED")) {
        MmxUtils.init();
        if (MmxUtils.isMmxBuild()) {
            setIcon();
        }
    }
}
private void setIcon() {
PackageManager pm = this.getPackageManager();
// Enable/disable activity-aliases
pm.setComponentEnabledSetting(
        new ComponentName(this, "com.app.MainActivityVendor"),
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
);
int enabled = pm.getComponentEnabledSetting(new ComponentName(this, "com.app.MainActivity"));

pm.setComponentEnabledSetting(
        new ComponentName(this, "com.app.MainActivity"),
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP
);
}

它解决了我的问题。

最新更新