如何在后台服务中更新无历史记录的Android应用程序(空堆栈)?
我有一个Android应用程序(第三方,不在google play中),每天检查一次新版本。检查并下载新版本的过程是在如何在后台服务中更新无历史记录的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
服务中进行的。因为我不想阻止用户(特别是当互联网速度较低时)浏览/使用应用程序的其他部分,所以我使用了一个服务
我实现了一个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安装程序。我不明白“在服务中使用空活动堆栈运行安装程序”是什么意思。您遇到了什么问题?请详细解释。我希望应用程序终止(而不是使用“无响应”消息)只是安装程序做它的工作来安装更新的版本。我找不到任何解决方案。