我想设置一个 BroadcastReceiver 来处理 PACKAGE_REPLACED,但我只想在我的包被替换时收到通知。如果我使用 scheme="package" 指定数据标签,它工作正常,但是当重新安装或升级任何应用程序时我会收到通知。我无法弄清楚我应该如何指定方案特定部分中的包名称 - 也就是说,当我的 BroadcastReceiver 在 onRecieve() 中获取意图时,如果我执行 intent.getData().getSchemeSpecificPart( ),这是包名,但有什么方法可以在我的意图过滤器中过滤吗?
1030 次
2 回答
1
在 Google 搜索应用中使用:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.google.android.googlequicksearchbox" />
</intent-filter>
但是根据我的粗略测试,这仍然可以捕获任何更新的包,这使得“android:path”部分实际上无用。
对于 Android 3.1+,您可以使用此新操作仅在您的包更新时做出响应:
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
如果您必须支持回 Android 2.x,更好的做法是为 和 声明 2 个单独的接收PACKAGE_REPLACED
器MY_PACKAGE_REPLACED
。然后在第一次运行时,检查运行时 Android 版本,如果版本是 3.1+,则禁用旧版本。
于 2013-01-24T17:09:45.457 回答
0
package
如您所说,最简单的方法是使用该方案接受任何广播意图,但要根据Intent
随操作发送的附加内容进行过滤PACKAGE_*
。
如果中的包名称Intent
与您的不匹配,请忽略它。
于 2010-02-03T23:53:46.550 回答