【问题标题】:Call broadcast receiver at time of uninstalling application in android [duplicate]在android中卸载应用程序时调用广播接收器[重复]
【发布时间】: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 是基于系统的广播,所以它没有被调用还是什么?
  • 这看起来不像是重复的。另一个问题与我自己的申请无关。

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


【解决方案1】:

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

原因

这是因为当你在自己的应用中注册卸载接收器时,当应用被卸载时,注册的BroadcastReceiver在应用被卸载之前已经被卸载,所以它自己的卸载事件不会被那个BroadcastReceiver接收到。

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

【讨论】:

  • 那么如何预防这种情况呢?长期以来,我一直坚持这些。由于我使用 Manifest 文件注册广播,那么它是如何在实际应用程序被卸载之前被卸载的?
  • 试想一个场景,说广播已注册(比如短信接收器)并且应用程序即将被卸载。现在短信进入广播检测到它但广播的应用程序(创建它)被卸载了。这可能会导致系统不一致。所以这可能就是它发生的原因。
  • 那么如何避免这种情况呢?是否可以在卸载应用程序时广播事件,因为它是受系统保护的广播?
  • 您自己的应用程序无法实现自己的卸载。对于任何其他被卸载的应用程序,它可能很有用。
  • 是否可以清理我的应用程序在 SD 卡上创建的垃圾?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多