PACKAGE_REMOVED & then PACKAGE_ADDED are fired along with PACKAGE_REPLACED Intent Action

100rabh picture 100rabh · Mar 7, 2011 · Viewed 10.2k times · Source

All I am trying to do is update my list on each Install & Uninstall but not on Package Replace .So the main problem is that Install & Uninstall intents are launched on each Replace action.

So For this I have implemented a BroadcastReciever as below

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

On each Replace I get 3 broadcasts with actions

  • First with PACKAGE_REMOVED which fires AppReciever
  • then after PACKAGE_ADDED which again fires AppReciever
  • And then after few seconds PACKAGE_REPLACED which again fires AppReciever

So please suggest any better way to catch only Replace Action

Or

a way to stop previously launched Services due to PACKAGE_REMOVED and PACKAGE_ADDED action.

Answer

ChrOnOs picture ChrOnOs · Apr 7, 2011

Just check intent.getBooleanExtra(Intent.EXTRA_REPLACING, false):

if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED) &&
    intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
    return;