【问题标题】:Auto-restart app after market update市场更新后自动重启应用
【发布时间】:2013-03-22 13:58:01
【问题描述】:

每当我在 Market 中发布我的应用的新版本时,如果用户启用了“自动更新”选项,应用就会自动更新。

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

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

adb install oldversion.apk

自动更新:

adb install -r newversion.apk

在我运行第二个命令后,应用程序成功更新,但它已停止并没有重新启动。

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

【问题讨论】:

标签: android service google-play auto-update


【解决方案1】:

如果您的应用在API 12 或更高版本上运行,我建议您注册一个BroadcastReceiver 收听android.intent.action.MY_PACKAGE_REPLACED

仅当您的应用程序获得更新时才会触发此 Intent。

【讨论】:

    【解决方案2】:

    这是你必须仔细测试的东西,但你应该能够用广播接收器捕捉到它,动作为Intent.ACTION_PACKAGED_REPLACED

    然后你从你的接收器启动服务。

    【讨论】:

    • 我正在尝试但不工作...我尝试了pastie.org/8223893你能给建议吗??
    • 我认为使用 ACTION_MY_PACKAGE_REPLACED 会更好?因为它只是被发送到正在更新的包,而不是所有包。
    • 作为android文档developer.android.com/guide/components/broadcasts注意:如果您的应用程序针对API级别26或更高,您不能使用清单声明隐式广播的接收器(不专门针对您的应用程序的广播),除了一些不受该限制的隐式广播。在大多数情况下,您可以改用计划作业。所以这个 Intent.ACTION_PACKAGED_REPLACED 还在工作?
    【解决方案3】:

    注册BroadcastReceiverIntent.ACTION_PACKAGE_REPLACED

    然后,将EXTRA_UID 与您自己的进行比较。如果匹配,您可以重新启动服务。

    【讨论】:

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