galaxyfreak
galaxyfreak

Reputation: 79

Android: BroadcastReceiver: UNINSTALL_PACKAGE intent

I need to detect when my app is being uninstalled. For that, I've seen logcat sends out UNINSTALL_PACKAGE intent, and I simply added it to existing Broadcast Receiver I have. But it just doesn't catch it, while other intent I'm listening to, TIME_TICK, works perfectly. Why?

Code currently used:

    private IntentFilter intentFilter;

static {
    intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_TIME_TICK);
    intentFilter.addAction(Intent.ACTION_UNINSTALL_PACKAGE);
}

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (action.equals(Intent.ACTION_UNINSTALL_PACKAGE) {
            Log.e("App", "Uninstalling");
        } else if (action.equals(Intent.ACTION_TIME_TICK){
        // this works
        }
    }
};

Upvotes: 0

Views: 652

Answers (3)

John61590
John61590

Reputation: 1106

Can't you just listen for android.intent.action.PACKAGE_REMOVED with your IntentFilter when you uninstall using ACTION_DELETE or ACTION_UNINSTALL_PACKAGE?

Upvotes: 0

Ajay S
Ajay S

Reputation: 48592

I 've seen logcat sends out UNINSTALL_PACKAGE intent, and I simply added it to existing Broadcast Reciever I have. But it just doesn't catch it, while other intent I'm listening to, TIME_TICK, works perfectly. Why?

Whenever your application is being uninstalled, Android OS kills all the components associated with that application as well free memory & resources. Uninstall broadcast receiver intent was to listen uninstall event of others app not for your app.

If you want to capture uninstall event of your app then there is no concept google provides, however you can do by observing data change in your file system where you need to keep monitoring changes in file system.

This solution is not going to work for all phones & different versions of Android.

Upvotes: 0

CommonsWare
CommonsWare

Reputation: 1006614

I need to detect when my app is being uninstalled

There is no supported way to do this, for obvious security reasons.

But it just doesn't catch it

ACTION_UNINSTALL_PACKAGE is an activity action. Nothing on an Android device should be sending it as a broadcast. Hence, you cannot listen to it via a BroadcastReceiver.

Upvotes: 1

Related Questions