1

我已经实现了一个应用程序,它基本上是一个自定义应用程序商店,用于更新和启动一系列相关应用程序。它还需要自我更新,这可以工作,但在安装过程中应用程序会在没有警告的情况下被终止。在这种情况下,我想自动重新启动应用程序,以便用户可以在更新后立即继续使用它。

所以我制作了一个单独的应用程序,其中只包含一个广播接收器,它监听第一个应用程序包名称的包事件并启动一个新活动。该接收器永远不会被调用

<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>

在寻找类似的实现时,我看到了直接矛盾的信息,即只有接收器的应用程序是否会执行,以及如果接收器的应用程序尚未运行,是否会调用接收器。我什至遇到过仅包含接收器的应用程序示例代码,其清单与我自己的非常相似。那么我在这个应用程序中需要什么来确保在安装另一个包时调用接收器?

如果有更好的解决方案,我很乐意听到。

4

1 回答 1

1

根据 Android 的版本,您可能需要启动应用程序组件才能BroadcastReceiver注册。我的意思是需要有一个Activity必须由用户手动启动的启动器。

从 Honeycomb(我认为)开始,除非应用程序以某种方式手动启动,否则不可能让应用程序组件“活动”。这背后的原因是在最终用户不知情的情况下执行不安全代码的可能性。

我怀疑这就是你正在经历的。Activity要对其进行测试,请在其中包含的应用程序中添加一个简单的“Hello World” BroadcastReceiver。启动Activity然后检查是否BroadcastReceiver在您的其他软件包更新后调用 then。

于 2012-09-05T19:02:10.817 回答