Android应用更新广播

时间:2015-06-09 09:19:52

标签: android broadcastreceiver

所以,我正在开展一些工作,要求我知道设备上的其他应用程序何时正在更新。所以我的问题很简单,让我们说YouTube或Spotify在应用程序更新时发送广播,如果是这样,我需要抓住我的broadcastReceiver。

3 个答案:

答案 0 :(得分:12)

您的意图过滤器应该是:

<intent-filter>
   <action android:name="android.intent.action.PACKAGE_REPLACED" />
   <data android:scheme="package" />
</intent-filter>

来自BroadcastReceiver的onReceive方法应为:

@Override
public void onReceive(Context context, Intent intent) {
    Uri data = intent.getData();
    if (data.toString().equals("package:" + "com.target.package") {
        // action to do
    }
}

答案 1 :(得分:4)

ACTION_PACKAGE_REPLACED是在更新应用程序时触发的操作 根据文件:

  

已安装新版本的应用程序包,正在替换   以前安装的现有版本。数据包含   包的名称。

intent.getPackage()返回此意图专门针对的包/应用程序,但它被发送给任何感兴趣的接收者,因此,没有这样的包。

使用intent.getData()将更新的包作为Uri

返回

在Manifest.xml中注册广播接收器时添加以下intent过滤器

<intent-filter>
   <action android:name="android.intent.action.PACKAGE_REPLACED" />
   <data android:scheme="package" />
</intent-filter>

答案 2 :(得分:2)

  

根据android文档:   广播操作:已在现有版本上安装新版本的应用程序。这仅发送到已替换的应用程序。它不包含任何其他数据;要接收它,只需使用一个意图过滤器来执行此操作。

<intent-filter>
   <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
   <data android:scheme="package" />
</intent-filter>

来自BroadcastReceiver的onReceive方法应为:

@Override
public void onReceive(Context context, Intent intent) {
    // action to do

}