我已经实现了一个应用程序,它基本上是一个自定义应用程序商店,用于更新和启动一系列相关应用程序。它还需要自行更新,但是在安装过程中应用程序会在没有警告的情况下被杀死。我希望在这种情况下自动重启应用程序,以便用户可以在更新后立即继续使用它。
所以我创建了一个单独的应用程序,其中只包含一个广播接收器,用于侦听第一个应用程序包名称的包事件并启动一个新活动。 永远不会调用该接收器:
<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<receiver android:name=".AppUpdateReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
在搜索类似的实现时,我直接看到了有关只有一个接收器的应用程序是否会执行的矛盾信息,以及如果它的应用程序尚未运行,是否会调用接收器。我甚至遇到过只包含接收器的example code应用程序,其清单与我自己的清单非常相似。那么在这个应用程序中我需要什么才能确保在安装另一个软件包时调用接收器?
如果有更好的解决方案,我会很高兴听到它。
答案 0 :(得分:1)
根据Android的版本,您可能需要启动应用程序组件才能注册BroadcastReceiver
。我的意思是需要一个必须由用户手动启动的启动器Activity
。
从Honeycomb(我认为)开始,除非应用程序已经以某种方式手动启动,否则不可能让应用程序组件“活动”。这背后的原因是在没有最终用户知识的情况下执行不安全代码的可能性。
我怀疑这就是你所经历的。要对其进行测试,请在其中包含Activity
的应用中添加一个简单的“Hello World”BroadcastReceiver
。启动Activity
,然后检查是否在更新其他程序包后调用BroadcastReceiver
。