市场更新后自动重启应用程序

10
任何时候我在市场上发布我的应用程序的新版本,如果用户已经启用“自动更新”选项,则该应用程序将自动更新。 该应用程序包含一个不断运行的服务。但是当自动更新发生时,旧的正在运行的应用程序被终止了,但新的应用程序并没有启动。由于更新对用户来说大多是透明的,所以有意义的是在更新后自动重新启动应用程序的服务,以便几乎不会中断服务。 使用市场上的真正更新测试这一点有点困难,因此我使用以下两个adb命令来模拟此更新过程。 安装第一个版本:
adb install oldversion.apk

自动更新:

adb install -r newversion.apk

运行第二个命令后,应用程序已成功更新,但已停止且未重新启动。

如何使新版本的服务自动启动?


1
https://dev59.com/n2gv5IYBdhLWcg3wQ-qd - Alexis
3个回答

9
如果您的应用程序运行在API 12或更高版本上,我建议注册一个BroadcastReceiver来监听android.intent.action.MY_PACKAGE_REPLACED。该Intent只有在您的应用程序更新时才会触发。

5

这是一件需要仔细测试的事情,但是你应该能够通过使用具有操作Intent.ACTION_PACKAGE_REPLACED的广播接收器来捕捉它。

然后,您可以从接收器启动服务。


我正在尝试,但是不起作用... 我尝试了http://pastie.org/8223893 你能给些建议吗? - Karan Mavadhiya
我认为使用ACTION_MY_PACKAGE_REPLACED会更好?因为它只会发送到正在更新的包,而不是所有包。 - code2be
请注意:如果您的应用程序的目标API级别为26或更高,则不能使用清单来声明隐式广播接收器(不针对您的应用程序特定的广播),除了一些豁免该限制的隐式广播。在大多数情况下,您可以使用计划任务代替。那么,Intent.ACTION_PACKAGED_REPLACED是否仍然有效? - Vo Thanh Tung

1

注册一个 BroadcastReceiverIntent.ACTION_PACKAGE_REPLACED

接着,将 EXTRA_UID 与你自己的进行比较。如果匹配,你就可以重新启动你的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接