Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Receiving package install and uninstall events

I am trying to detect when a new App is being installed but only if my app is running. I managed to detect the installation of the app by making a BroadcastReceiver and activating it inside the AndroidManifest file but this will detect even if my app is closed. So that is why I need to manually activate and deactivate the broadcastreveiver. To do this I have this code:

br = new BroadcastReceiver() {      @Override     public void onReceive(Context context, Intent intent) {         // TODO Auto-generated method stub         Log.i("Enter", "Enters here");         Toast.makeText(context, "App Installed!!!!.", Toast.LENGTH_LONG).show();     } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); registerReceiver(br, intentFilter); 

This should make a toast when a new app is installed. But sadly it does not. It does not enter in the onReceive method. Any help is appreciated.

like image 841
Petre Popescu Avatar asked Sep 19 '11 11:09

Petre Popescu


1 Answers

I tried to register the BroadcastReceiver in either manifest file or java code. But both of these two methods failed to trigger the onReceive() method. After googling this problem, I found a solution for both methods from another Thread in SO: Android Notification App

In the manifest file (this approach no longer applies since API 26 (Android 8), it was causing performance issues on earlier Android versions):

<receiver android:name=".YourReceiver">     <intent-filter>         <action android:name="android.intent.action.PACKAGE_INSTALL" />         <action android:name="android.intent.action.PACKAGE_ADDED" />         <data android:scheme="package"/>     </intent-filter> </receiver> 

In java code:

IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); intentFilter.addDataScheme("package"); registerReceiver(br, intentFilter); 

This should work for you.

like image 192
Huang Avatar answered Sep 23 '22 21:09

Huang