2017-07-05 14 views
1

我有一个Android应用程序(第三方,不是在谷歌播放)每天检查一次新版本。检查更新版本并下载它的过程发生在Service。因为我不想停止使用其他应用程序的用户(特别是当互联网速度很慢时),我使用了一项服务。如何在没有历史记录(空堆栈)的后台服务中更新Android应用?

我执行BroadcastReceiver以在下载完成时得到通知(ACTION_DOWNLOAD_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标志开始的意图,不会清除活动叠加。

通知:如果用户点击后退按钮或取消,导航到我的应用程序的活动,但在这种情况下,我希望应用程序关闭,没有“无响应”的消息。

问题:是否可以在服务中运行具有空活动堆栈的活动(安装程序一)?有没有其他的方式来完成这项工作?如果是的话如何?

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

+0

发布您的清单。我假设安装程序'Activity'不是通常的根'Activity'(ACTTION = MAIN和CATEGORY = LAUNCHER的那个) –

+0

'Manifest'中没有定义安装程序活动,它通过意图调用:'Intent installIntent =新意图(Intent.ACTION_VIEW); installIntent.setDataAndType(Uri.fromFile(myFile), “application/vnd.android.package-archive”);' –

+0

项目位于[此链接](https:// github。 com/Kickass86/MPAS/tree/master/app/src/main) –

回答

0

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

创建一个“安装程序”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()。如果用户取消安装,您的应用将不再运行。

相关问题