在android中卸载应用程序时调用广播接收器[重复]
Posted
技术标签:
【中文标题】在android中卸载应用程序时调用广播接收器[重复]【英文标题】:Call broadcast receiver at time of uninstalling application in android [duplicate] 【发布时间】:2014-03-26 05:20:25 【问题描述】:我想清理我的应用程序在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。卸载应用时如何捕捉广播事件?
【问题讨论】:
@nKn :我已经尝试过该解决方案,但它对我不起作用:/ @nKn :因为这些 Action.PACKAGE_REMOVED 是基于系统的广播,所以它没有被调用还是什么? 这看起来不像是重复的。另一个问题与我自己的申请无关。 【参考方案1】:您可以为任何其他被卸载的软件包获取广播,但不能为您自己的软件包获取广播。
原因
这是因为当你在自己的应用中注册卸载接收器时,当应用被卸载时,注册的BroadcastReceiver在应用被卸载之前已经被卸载,所以它自己的卸载事件不会被那个BroadcastReceiver接收到。
想想一个场景,说广播已注册(比如短信接收器)并且应用程序即将被卸载。现在短信进入广播检测到它但广播的应用程序(创建它)被卸载了。可能导致系统不一致。所以这可能就是它发生的原因。
【讨论】:
那么如何预防这种情况呢?长期以来,我一直坚持这些。由于我使用 Manifest 文件注册广播,那么它是如何在实际应用程序被卸载之前被卸载的? 试想一个场景,说广播已注册(比如短信接收器)并且应用程序即将被卸载。现在短信进入广播检测到它但广播的应用程序(创建它)被卸载了。这可能会导致系统不一致。所以这可能就是它发生的原因。 那么如何避免这种情况呢?是否可以在卸载应用程序时广播事件,因为它是受系统保护的广播? 您自己的应用程序无法实现自己的卸载。对于任何其他被卸载的应用程序,它可能很有用。 是否可以清理我的应用程序在 SD 卡上创建的垃圾?以上是关于在android中卸载应用程序时调用广播接收器[重复]的主要内容,如果未能解决你的问题,请参考以下文章