如何从服务安装APK

时间:2017-03-18 19:09:29

标签: android android-activity android-service

我有一个BroadcastReceiver,我从服务器下载了一个apk,当我抓住动作DownloadManager.ACTION_DOWNLOAD_COMPLETE时我使用

安装了apk
activity.startActivityForResult(my_intent, REQUEST_CODE)

现在我想在Service中移动这个逻辑并安装apk,但是在服务中我没有Activity,我可以将上下文转换为从getapplicationcontext()获得的Activity,但是我捕获上下文无法转换为com.android.Activity

的错误

如何从此服务运行apk的安装?

1 个答案:

答案 0 :(得分:2)

用户敌对方法是拨打startActivity()而不是startActivityForResult()。这是用户恶意的,因为它会自动启动安装程序UI,而您的服务不知道用户在前台做了什么。中断用户不会让用户感到高兴。

相关的用户敌对方法是从服务开始您自己的活动,然后您自己的活动会调用startActivityForResult()。您可以使用Theme.Translucent.NoTitleBar,因此您自己的活动没有UI,但是,您将再次启动安装程序活动,这将中断用户。

用户友好的方法是在下载完成后提升Notification。将ACTION_INSTALL_PACKAGE Intent放入Notification本身,或让通知开始您的活动,然后再调用startActivityForResult()。这允许用户在用户想要时安装应用程序,现在可能是也可能不是。