【问题标题】:Android: BroadcastReceiver: UNINSTALL_PACKAGE intentAndroid:BroadcastReceiver:卸载包意图
【发布时间】:2017-03-05 09:07:18
【问题描述】:

我需要检测我的应用何时被卸载。为此,我看到 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
        }
    }
};

【问题讨论】:

标签: java android uninstallation broadcast


【解决方案1】:

我需要检测我的应用何时被卸载

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

但它只是没有抓住它

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

【讨论】:

    【解决方案2】:

    我已经看到 logcat 发出 UNINSTALL_PACKAGE 意图,我只是将它添加到我现有的广播接收器中。但它只是没有抓住它,而我正在听的其他意图 TIME_TICK 完美地工作。为什么?

    每当您的应用程序被卸载时,Android 操作系统都会杀死与该应用程序相关的所有组件,并释放内存和资源。 Uninstall 广播接收器意图是监听其他应用程序的卸载事件,而不是为您的应用程序。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-09-10
        • 2011-05-22
        • 1970-01-01
        • 2016-11-22
        • 1970-01-01
        • 2011-12-13
        • 2021-06-17
        • 2017-11-24
        • 1970-01-01
        相关资源
        最近更新 更多