Search code examples
androidbroadcastreceiver

ACTION_MY_PACKAGE_REPLACED not received


I am using ACTION_MY_PACKAGE_REPLACED to receive when my app is updated or resinstalled. My problem is that the event is never triggered (I tried Eclipse and real device). This is what I do:

Manifest:

<receiver android:name=".MyEventReceiver" >
    <intent-filter android:priority="1000" >
        <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" />
    </intent-filter>
</receiver>

Code:

public class MyEventReceiver extends BroadcastReceiver
{  
   @Override public void onReceive(Context context, Intent intent)
   {  
      if ("android.intent.action.ACTION_MY_PACKAGE_REPLACED".equals(intent.getAction())) 
      {  //Restart services
      }
   }      
}

This code is simple, in real one I used other events like BOOT_COMPLETED and others, and they work but ACTION_MY_PACKAGE_REPLACED. Thanks.


Solution

  • Getting information from all the users I could solve my situation this way. All of them were right, with little points to notice:

    In manifest:

        <receiver android:name=".MyEventReceiver" >
            <intent-filter android:priority="1000" >
                <!--other actions I need-->
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <data android:scheme="package"/>
            </intent-filter>
        </receiver>
    

    And code:

    public class MyEventReceiver extends BroadcastReceiver
    {     
        @Override public void onReceive(Context context, Intent intent)
        {  
           if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())) 
           {   if(intent.getData().getSchemeSpecificPart().equals(context.getPackageName()))
               {  //Restart services.
               }
           }
        }      
    }
    

    In my Android release (2.3 Gingerbread) I was not able to use MY_PACKAGE_REPLACED but we solved using PACKAGE_REPLACED (will advise of any app been replaced) but asking if it is ours with:

     if(intent.getData().getSchemeSpecificPart().equals(context.getPackageName()))
     {
     }
    

    Thanks to all