如何从服务安装 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()
。这允许用户在用户想要时安装应用程序,这可能是也可能不是现在。
我有一个 BroadcastReceiver
,我从服务器下载了一个 apk,当我捕捉到动作时 DownloadManager.ACTION_DOWNLOAD_COMPLETE
我使用
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()
。这允许用户在用户想要时安装应用程序,这可能是也可能不是现在。