我正在处理一个需要知道设备上另一个应用程序何时更新的项目。所以我的问题很简单,比如说YouTube或Spotify在应用程序更新时是否会发送广播,如果是的话,我需要使用broadcastReceiver捕获什么。
我正在处理一个需要知道设备上另一个应用程序何时更新的项目。所以我的问题很简单,比如说YouTube或Spotify在应用程序更新时是否会发送广播,如果是的话,我需要使用broadcastReceiver捕获什么。
你的意图过滤器应该如下所示:
<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
}
}
<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
}
<data android:scheme="package" />
并保持其余部分不变 - 在另一个帖子中发现,似乎有效。 - Ben<data android:scheme="package" />
应该被移除。 - RafaelACTION_PACKAGE_REPLACED 是一个与应用程序更新相关的操作。
根据文档:
一个应用程序包的新版本已安装,替换了以前安装的现有版本。数据包含软件包的名称。
intent.getPackage()
返回此意图特定寻址的软件包/应用程序,但它被发送给任何感兴趣的接收器,因此不存在这样的软件包。
请使用 intent.getData()
方法返回更新的软件包作为 Uri。
在 Manifest.xml 中注册广播接收器时添加以下意图过滤器:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
MY_PACKAGE_REPLACED
。 - kingston