0

我相信这个问题 在市场更新后重复了这个自动重启应用程序

每当我在市场中发布我的应用程序的新版本时,如果用户启用了“自动更新”选项,应用程序将自动更新。

该应用程序包含一个不断运行的服务。但是当自动更新发生时,旧的正在运行的应用程序被杀死,但新的应用程序没有启动。由于更新对用户来说主要是透明的,因此应用程序的服务应该在更新后自动重新启动,这样服务几乎不会中断。

用市场上的真实更新来测试这个有点困难,所以我使用以下两个 adb 命令来模拟这个更新过程。安装第一版:

adb install oldversion.apk //(版本号为1)自动更新:

adb install -r newversion.apk //(版本代码为 2)

就我而言,我有两个活动,第一个是 MainActivity,第二个是活动。如果用户正在使用 secondActivity 并且应用程序自动更新(对我来说,我正在使用 adb 命令安装新版本),如何在应用程序成功更新新版本后触发运行 MainAcitivty?

4

1 回答 1

0

我也相信这是重复的问题。您是否尝试过MY_PACKAGE_REPLACED在意图过滤器中使用注册广播?(设备重启时也会触发,可能有用)

显现:

<receiver
        android:name=".OnUpdateReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

代码:

public class OnUpdateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null ||
                (!Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction()) &&
                        !Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())))
            return;
        // your code, start your Service again or
        // Activity if it is REALLY desired behavior
    }
}

您可以使用此命令测试此代码,无需“真正”更新

adb shell am broadcast -a android.intent.action.MY_PACKAGE_REPLACED -n com.yourapp/.OnUpdateReceiver

支持直接来自官方 Google Play Core API 的应用内更新,也许这可以用最少的代码解决您的问题

于 2019-11-25T09:25:19.050 回答