PACKAGE_REMOVED然后PACKAGE_ADDED与PACKAGE_REPLACED意图行动一起被触发

100*_*abh 21 android intentfilter broadcastreceiver

我所要做的就是在每次安装和卸载时更新我的​​列表,但更新包更换.因此,主要问题是每次替换操作都会启动安装和卸载意图.

所以为此我已经实现了如下的BroadcastReciever

<receiver android:name =".IntentReceiverTest.AppReciever">
  <intent-filter>
         <action android:name="android.intent.action.PACKAGE_REMOVED"/>
         <action android:name="android.intent.action.PACKAGE_REPLACED"/>
         <action android:name="android.intent.action.PACKAGE_ADDED"/>
         <data android:scheme="package"/> 
  </intent-filter>
</receiver> 
Run Code Online (Sandbox Code Playgroud)

在每个替换我得到3个广播与行动

  • 首先使用PACKAGE_REMOVED激活AppReciever
  • 然后在PACKAGE_ADDED之后再次触发AppReciever
  • 然后几秒钟PACKAGE_REPLACED再次激活AppReciever

所以请建议任何更好的方法来捕捉替换行动

要么

由于PACKAGE_REMOVED和PACKAGE_ADDED操作而停止先前启动的服务的方法.

小智 30

只需检查intent.getBooleanExtra(Intent.EXTRA_REPLACING, false):

if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED) &&
    intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
    return;
Run Code Online (Sandbox Code Playgroud)