Android 包装已拆除&;然后,添加的包将与替换的包一起启动

Android 包装已拆除&;然后,添加的包将与替换的包一起启动,android,broadcastreceiver,intentfilter,Android,Broadcastreceiver,Intentfilter,我所要做的只是在每次安装和卸载时更新我的列表,但在软件包替换时不更新列表。因此,主要问题是每次替换操作都会启动安装和卸载意图 所以 为此,我实现了一个广播接收器,如下所示 <receiver android:name =".IntentReceiverTest.AppReciever"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED"/&g

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

所以 为此,我实现了一个广播接收器,如下所示

<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> 

每次更换时,我都会收到3个动作广播

  • 首先,移除程序包,该程序包将发出通知
  • 然后在包之后添加,该包将再次发出通知
  • 几秒钟后,软件包被替换,它再次发出警报
因此,请建议任何更好的方法,以捕捉只替换行动


由于删除和添加包而停止以前启动的服务的方法。

只需检查
intent.getBooleanExtra(intent.EXTRA\u替换,false)


我是否遗漏了你的问题,或者答案只是“不要过滤你不想要的意图”…@Blrfl我需要删除
PACKAGE\u
&
PACKAGE\u ADDED
,只有在实际安装/卸载包时,而不是在更换包时。阅读我问题的第三行。阅读你的意图过滤器的第二行,然后阅读Birfl的评论,然后再次阅读你的意图过滤器的第二行。@dziobas如果我没有捕捉到包被替换的动作,我得到的就是包被移除,然后每次应用被替换时包被添加动作。我希望你理解这个问题。确保正确构造你的接收器元素。我忘了在动作和数据标签周围贴标签。。。没有收到任何错误,只是没有广播
意图。总是在
操作中添加额外的\u替换
。更新应用程序时,程序包被删除
,程序包被添加。在正常安装和卸载时,这是错误的。@suku在我的情况下,在删除或添加的包中都不存在额外的替换包…我想知道为什么
if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED) &&
    intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
    return;