如何在没有历史记录(空堆栈)的后台服务中更新 Android 应用程序?

how to update Android app in background service with no history(empty stack)?

我有一个 Android 应用程序(第 3 方,不在 google 游戏中)每天检查一次更新版本。检查更新版本并下载它的过程发生在 Service 中。因为我不想从 navigating/using 应用程序的其他部分停止用户(特别是当互联网速度较低时),所以我使用了一项服务。

我实现了一个 BroadcastReceiver 以在下载完成 (ACTION_DOWNLOAD_COMPLETE) 时收到通知。我想通过使用空堆栈启动 activity 来安装新版本。我是这样做的:

installIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(installIntent); 

但我在日志中收到此错误:

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

并使用 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY 标志启动意图,不会清除活动堆栈。

注意:如果用户点击后退按钮或取消,导航到我的应用程序的 activity 但在这种情况下我希望应用程序在没有 [=35= 的情况下关闭] 消息。

问题:是否可以在服务中使用空 activity 堆栈 运行 activity(安装程序一)?还有其他方法可以完成这项工作吗?如果是怎么办?

顺便说一下,我的所有这些意图是强制用户安装更新。 谢谢。

有几种方法可以做到这一点。这是一个例子:

创建一个 "installer" Activity,它只启动 Android 安装程序,然后在 onCreate() 中调用 finish()

在您的 BroadcastReceiver 中,您可以通过执行以下操作使您的应用程序退出并启动安装程序:

Intent intent = new Intent(context, MyInstallerActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

这将清除您应用程序中可能 运行ning 和 运行 MyInstallerActivity 的所有活动。在 MyInstallerActivity.onCreate() 中,您应该只启动 Android 安装程序(正如您已经在做的那样)并调用 finish()。如果用户取消安装,您的应用将不再 运行ning.