防止包更新上的android.intent.action.PACKAGE_REMOVED

时间:2017-02-01 06:06:55

标签: android broadcastreceiver manifest

我在Manifest中注册了一个全局广播接收器,当用户卸载软件包时会显示通知。

 <receiver android:name=".YourReceiver">
        <intent-filter android:priority="999">
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_REPLACED"/>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="com.times.REFRESH_INSTALL_FLAG" />

            <data android:scheme="package" />
        </intent-filter>
    </receiver>

问题是当某些软件包从Play商店更新操作时 android.intent.action.PACKAGE_REMOVED android.intent.action.PACKAGE_ADDED 会一个接一个地调用。

问题在于我无法区分软件包是否已卸载或更新。

其中一种方法是等到我们收到相同包裹名称的 PACKAGE_ADDED ,然后解除通知。

有没有其他正确的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

自己搞定!通过检查是否安装了收到的包名来区分!

答案 1 :(得分:1)

您还可以检查意图上的EXTRA_REPLACING(如果它是PACKAGE_REMOVED意图)。

  

公共静态最终字符串EXTRA_REPLACING

     

在ACTION_PACKAGE_REMOVED意图中用作布尔额外字段   表示这是软件包的替代品,因此此广播   紧随其后的是另外一个广播   同一软件包的版本。