如何从服务安装 APK

How to install an APK from Service

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

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

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

的错误

如何从该服务运行 安装 apk?

用户敌对的方法是调用 startActivity() 而不是 startActivityForResult()。这是对用户不利的,因为它会自动启动安装程序 UI,并且您的服务不知道用户在前台做什么。打断用户不会让用户很开心。

一种相关的用户敌对方法是从服务启动您自己的 activity,然后您自己的 activity 调用 startActivityForResult()。您可以使用 Theme.Translucent.NoTitleBar,这样您自己的 activity 就没有 UI,但是,您将再次启动安装程序 activity,这会打扰用户。

用户友好的方法是在下载完成时提出Notification。要么将 ACTION_INSTALL_PACKAGE Intent 放入 Notification 本身,要么让通知启动你的 activity,后者又会调用 startActivityForResult()。这允许用户在用户想要时安装应用程序,这可能是也可能不是现在。