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

如何在后台服务中更新无历史记录的Android应用程序(空堆栈)?,android,android-intent,android-activity,android-service,Android,Android Intent,Android Activity,Android Service,我有一个Android应用程序(第三方,不在google play中),每天检查一次新版本。检查并下载新版本的过程是在服务中进行的。因为我不想阻止用户(特别是当互联网速度较低时)浏览/使用应用程序的其他部分,所以我使用了一个服务 我实现了一个BroadcastReceiver,在下载完成时收到通知(ACTION\u download\u COMPLETE)。我想通过使用空堆栈启动其活动来安装新版本。我的工作如下: installIntent.setFlags(Intent.FLAG_ACTIVI

我有一个Android应用程序(第三方,不在google play中),每天检查一次新版本。检查并下载新版本的过程是在
服务中进行的。因为我不想阻止用户(特别是当互联网速度较低时)浏览/使用应用程序的其他部分,所以我使用了一个服务

我实现了一个
BroadcastReceiver
,在下载完成时收到通知(
ACTION\u download\u COMPLETE
)。我想通过使用空堆栈启动其活动来安装新版本。我的工作如下:

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
FLAG启动intent不会清除活动堆栈

注意:如果用户单击“后退”按钮或“取消”,将导航到我的应用程序的活动,但在这种情况下,我希望应用程序在不显示“无响应”消息的情况下关闭

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

顺便说一句,我的目的是强迫用户安装更新。
谢谢。

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

创建一个“安装程序”
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);

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

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

创建一个“安装程序”
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);

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

发布您的清单。我假设安装程序
活动
不是通常的根
活动
(带有ACTION=MAIN和CATEGORY=LAUNCHER.installer活动的安装程序活动未在
清单
中定义。它通过intent调用:
intent installIntent=newintent(intent.ACTION\u视图);installIntent.setDataAndType(Uri.fromFile(myFile),“application/vnd.android.package archive”);
如果您需要其他内容,项目就在其中。好的,您正在启动android安装程序。我不明白“在服务中使用空活动堆栈运行安装程序”是什么意思。您遇到了什么问题?请详细解释。我希望应用程序终止(而不是出现“无响应”消息),安装程序只需完成安装新版本的工作。我找不到任何解决方案。发布您的清单。我假设安装程序
活动
不是通常的根
活动
(带有ACTION=MAIN和CATEGORY=LAUNCHER.Installer活动的安装程序未在
Manifest
中定义。它是通过intent调用的:
intent installIntent=newintent(intent.ACTION\u视图);installIntent.setDataAndType(Uri.fromFile(myFile),“application/vnd.android.package归档”)
如果您需要其他内容,项目已启动。好的,您正在启动Android安装程序。我不明白“在服务中使用空活动堆栈运行安装程序”是什么意思。您遇到了什么问题?请详细解释。我希望应用程序终止(而不是使用“无响应”消息)只是安装程序做它的工作来安装更新的版本。我找不到任何解决方案。