Android:广播接收器:UNINSTALL_PACKAGE 意图

Android: BroadcastReceiver: UNINSTALL_PACKAGE intent

我需要检测我的应用何时被卸载。为此,我看到 logcat 发出了 UNINSTALL_PACKAGE 意图,我只是将它添加到现有的广播接收器中。但它就是没有捕捉到它,而我正在收听的其他意图 TIME_TICK 却完美无缺。为什么?

当前使用的代码:

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

I need to detect when my app is being uninstalled

出于明显的安全原因,没有支持的方法来执行此操作。

But it just doesn't catch it

ACTION_UNINSTALL_PACKAGE is an activity action。 Android 设备上的任何内容都不应将其作为广播发送。因此,您无法通过 BroadcastReceiver.

收听它

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?

无论何时卸载您的应用程序,Android OS 都会终止与该应用程序关联的所有组件以及释放内存和资源。 Uninstall 广播接收器的意图是监听其他应用程序的卸载事件,而不是针对您的应用程序。

如果您想捕获应用程序的 uninstall 事件,则没有 google 提供的概念,但是您可以通过观察文件系统中的数据变化来实现,您需要在其中持续监控变化在文件系统中。

此解决方案不适用于所有手机和不同版本的 Android。

当您使用 ACTION_DELETEACTION_UNINSTALL_PACKAGE 卸载时,您不能只用 IntentFilter 监听 android.intent.action.PACKAGE_REMOVED 吗?