安卓设备未接收到已删除应用程序的 Intent ACTION_PACKAGE_REMOVED。

12
当我的Android应用被删除时,我想同时删除应用在SD卡上创建的文件,因为这些文件可能会占用很多兆字节,而且只对我的应用有用。
似乎接收“PACKAGE REMOVED”意图是执行此操作的地方。然而,在发送“PACKAGE REMOVED”意图之前,我的广播接收器从未被调用过,看起来它已经被删除了。
代码如下:
public class UninstallReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();
  Log.i("U", "ACTION " + action);
  //等等.
 }
}
并且在清单中:
 <application android:debuggable="true"
  android:icon="@drawable/icon"
  android:label="@string/app_name">

  <receiver android:name ="com.boom.UninstallReceiver">
   <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
     <data android:scheme="package" />
   </intent-filter>
  </receiver>
3个回答

13

文档说:

被删除的包不会接收到此Intent。

Android 2.2增加了getExternalFilesDir(),它将指向外部存储器上的一个位置,在应用程序被卸载时,Android会自动清理该位置。然而,这仅适用于Android 2.2,并且目前存在一些问题。但是,这是2011年需要考虑的事情。

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


0

你试过这个吗?

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

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

-7

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

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />

2
这个权限只授予系统应用程序,所以我不能在我的应用程序中使用它。 - Borys
4
这个回答完全错误。为了发送广播意图“PACKAGE_REMOVED”,需要获得这个权限。即使系统会授予您此权限(但事实并非如此),它仍然没有帮助。应该删除这个答案。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接