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

时间:2014-02-24 13:44:29

标签: android android-broadcast android-package-managers

我想在UnInstalling应用程序上清理我的应用程序创建的垃圾。

使用ManiFest文件: -

在清单文件中添加:

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

创建接收器以捕获BroadCast Event

public class CleanReceiver extends BroadcastReceiver
{
  public void onReceive(Context context, Intent intent) {
    CustomToast.showToastMessage(context, "Uninstalling Application");
    Log.e("Uninstall", "CleanReceiver Called");
  }
} 

在Java代码中: -

 BroadCastReceiver br = new CleanReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
 intentFilter.addDataScheme("package");
 registerReceiver(br, intentFilter);

但是在卸载应用程序时,接收器从未被调用过。

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

1 个答案:

答案 0 :(得分:5)

您可以获取已卸载的任何其他软件包的广播,但绝不会使用您自己的软件包。

<强>原因

这是因为当您在自己的应用程序中注册卸载接收器时以及卸载应用程序时,已卸载已注册的BroadcastReceiver,然后卸载应用程序,因此该广播接收器将不会收到其自身的卸载事件。

想想一个广播已经注册的场景(比如短信接收器),应用程序即将被卸载。现在广播中的短信检测到它,但广播的应用程序(创建它)被卸载了。导致系统不一致。这可能就是它发生的原因。