我有一个BroadcastReceiver
,我从服务器下载了一个apk,当我抓住动作DownloadManager.ACTION_DOWNLOAD_COMPLETE
时我使用
activity.startActivityForResult(my_intent, REQUEST_CODE)
现在我想在Service
中移动这个逻辑并安装apk,但是在服务中我没有Activity,我可以将上下文转换为从getapplicationcontext()获得的Activity,但是我捕获上下文无法转换为com.android.Activity
如何从此服务运行apk的安装?
答案 0 :(得分:2)
用户敌对方法是拨打startActivity()
而不是startActivityForResult()
。这是用户恶意的,因为它会自动启动安装程序UI,而您的服务不知道用户在前台做了什么。中断用户不会让用户感到高兴。
相关的用户敌对方法是从服务开始您自己的活动,然后您自己的活动会调用startActivityForResult()
。您可以使用Theme.Translucent.NoTitleBar
,因此您自己的活动没有UI,但是,您将再次启动安装程序活动,这将中断用户。
用户友好的方法是在下载完成后提升Notification
。将ACTION_INSTALL_PACKAGE
Intent
放入Notification
本身,或让通知开始您的活动,然后再调用startActivityForResult()
。这允许用户在用户想要时安装应用程序,现在可能是也可能不是。