我正在尝试抓住我的应用程序和我的应用程序替换广播的包,但由于某些原因,在我的接收器中,我是每个更新的应用程序的广播。我以为你只需要将清单文件中的intent过滤器设置到你的应用程序,但也许我错了?
这是我的代码(清单):
<receiver android:name=".UpdateReciever">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.my.app" />
</intent-filter>
</receiver>
Reciever:
public class AppUpdateReciever extends BroadcastReceiver {
@Override
public void onReceive(Context con, Intent intent) {
//code..
}
}
答案 0 :(得分:35)
将此添加到onReceive方法:
if (intent.getDataString().contains("com.my.app")){
...
}
修改强>
请注意,注册ACTION_PACKAGE_REPLACED
会导致您的应用每次更新任何应用时都会启动,如果它尚未打开。我不知道如何在API 12之前避免这种情况,但在API 12中,您可以注册ACTION_MY_PACKAGE_REPLACED
,这样您就不必过滤意图,并且不会被其他正在更新的应用程序不必要地启动您的应用程序
答案 1 :(得分:1)
或者,如果您的代码位于多个应用中包含的库中,或者您只是想要一些可以在应用之间复制/粘贴而无需编辑的内容:
int intentUid = intent.getExtras().getInt("android.intent.extra.UID");
int myUid = android.os.Process.myUid();
if (intentUid == myUid)
{
...
}