如何正确过滤包替换广播

nin*_*nse 20 android broadcast intentfilter broadcastreceiver

我试图抓住包替换广播为我的应用程序和我的应用程序,但由于某些原因在我的收件人我是广播的每个更新的应用程序.我以为你只需要将清单文件中的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>
Run Code Online (Sandbox Code Playgroud)

Reciever:

public class AppUpdateReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context con, Intent intent) {

        //code..    
    }

}
Run Code Online (Sandbox Code Playgroud)

Ten*_*r04 35

将其添加到onReceive方法:

if (intent.getDataString().contains("com.my.app")){
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑: 请注意,注册ACTION_PACKAGE_REPLACED会导致您的应用每次更新任何应用程序时启动,如果它尚未打开.我不知道如何在API 12之前避免这种情况,但是在API 12中您可以注册,ACTION_MY_PACKAGE_REPLACED这样您就不必过滤意图,并且您的应用程序将不会被其他正在更新的应用程序不必要地启动.