在android中卸载应用程序时调用广播接收器

在android中卸载应用程序时调用广播接收器,android,android-broadcast,android-package-managers,Android,Android Broadcast,Android Package Managers,我想在卸载应用程序时清除应用程序创建的垃圾 使用清单文件:- 在清单文件中添加: <receiver android:name="com.netdoers.com.ui.CleanReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" > </action>

我想在卸载应用程序时清除应用程序创建的垃圾

使用清单文件:-

在清单文件中添加:

 <receiver android:name="com.netdoers.com.ui.CleanReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED" >
            </action>
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>

在Java代码中:-

 BroadCastReceiver br = new CleanReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
 intentFilter.addDataScheme("package");
 registerReceiver(br, intentFilter);
但在卸载应用程序时,从未调用接收器


Java和Manifest都不会在卸载应用程序时调用接收方。如何在卸载应用程序时捕获广播事件?

您可以为正在卸载的任何其他软件包获取广播,但不能为您自己的软件包获取广播

原因

这是因为当您在自己的应用程序中注册uninstall receiver并且卸载应用程序时,注册的BroadcastReceiver在卸载应用程序之前已卸载,因此该BroadcastReceiver不会接收到其自身的卸载事件


试想一下这样一个场景,即广播已注册(例如sms接收器),应用程序即将卸载。现在sms进入广播时检测到它,但广播的应用程序(创建它的应用程序)已卸载。这可能会导致系统不一致。这可能就是发生这种情况的原因

@nKn:我尝试过那个解决方案,但对我无效:/@nKn:因为删除的这些Action.PACKAGE_是基于系统的广播,所以没有被调用或什么?这看起来不像是重复的。另一个问题不是关于我自己的应用程序。那么如何防止这种情况呢?很久以来我就一直受这些困扰。由于我正在使用清单文件注册广播,那么为什么在实际应用程序卸载之前它就被卸载了呢?试想一下这样一个场景,即广播已注册(例如sms接收器),应用程序即将卸载。现在sms进入广播时会检测到它,但广播的应用程序(创建它的应用程序)会检测到它已卸载。可能会导致系统不一致。这可能就是发生这种情况的原因。如何避免此类情况?是否可以在卸载应用程序时广播事件,因为它是受系统保护的广播?您自己的应用程序不可能实现自己的卸载。对于任何其他正在卸载的应用程序,它可能很有用。是否仍要清除我的应用程序在SD卡上创建的垃圾?
 BroadCastReceiver br = new CleanReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
 intentFilter.addDataScheme("package");
 registerReceiver(br, intentFilter);