Search code examples
javaandroiduninstallationbroadcast

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

Solution

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