如何在没有历史记录(空堆栈)的后台服务中更新 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.
我有一个 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.