12

当我的 android 应用程序被删除时,我还想删除该应用程序在 SD 卡上创建的文件,因为这些文件可能会消耗很多兆字节并且仅对我的应用程序有用。

似乎接收 PACKAGE REMOVED 意图将是执行此操作的地方。但是,我的广播接收器从未被调用——它似乎在发送 PACKAGE REMOVED 意图之前已被删除

代码是:

公共类 UninstallReceiver 扩展 BroadcastReceiver {
 @覆盖
 公共无效 onReceive(上下文上下文,意图意图){
  字符串动作=意图.getAction();
  Log.i("U", "动作" + 动作);
  等等
 }
}

并且,在清单中:

<应用程序 android:debuggable="true"
  android:icon="@drawable/icon"
  android:label="@string/app_name">

  <receiver android:name="com.boom.UninstallReceiver">
   <意图过滤器>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
     <data android:scheme="package" />
   </intent-filter>
  </接收者>
4

3 回答 3

13

文档说:

被删除的包没有收到这个 Intent。

Android 2.2 添加了getExternalFilesDir(),它将指向外部存储上的一个位置,当您的应用程序被卸载时,Android 将自动清理该位置。但是,这仅适用于 Android 2.2,并且有迹象表明它目前运行得不是特别好。然而,这是 2011 年要记住的事情。

除此之外,您真正能做的就是在某处为用户提供一个菜单选择来进行清理,并希望用户在卸载您之前使用它。

于 2010-09-05T23:14:48.183 回答
0

你试过这个吗?

    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    filter.addDataScheme("package");
    registerReceiver(new UnInstalledReceiver(), filter);

此外,将应用程序的文件放在文件夹android/data/com.boom/中是一种很好的简单方法,可以确保在用户卸载时清理额外的文件。

于 2021-10-07T01:37:05.117 回答
-6

您必须在清单中添加权限。

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
于 2012-09-27T12:41:22.243 回答