android 在已删除的包中没有收到 Intent ACTION_PACKAGE_REMOVED
Posted
技术标签:
【中文标题】android 在已删除的包中没有收到 Intent ACTION_PACKAGE_REMOVED【英文标题】:android not receiving Intent ACTION_PACKAGE_REMOVED in the removed package 【发布时间】:2011-04-08 13:40:54 【问题描述】:当我的 android 应用被删除时,我还想删除该应用在 SD 卡上创建的文件,因为这些文件会消耗很多兆字节并且只对我的应用有用。
似乎接收 PACKAGE REMOVED 意图将是执行此操作的地方。 但是,我的广播接收器从未被调用——它似乎在发送 PACKAGE REMOVED 意图之前已被删除
代码是:
公共类 UninstallReceiver 扩展 BroadcastReceiver @覆盖 公共无效 onReceive(上下文上下文,意图意图) 字符串动作=意图.getAction(); Log.i("U", "动作" + 动作); 等等。并且,在清单中:
【问题讨论】:
【参考方案1】:documentation 说:
被移除的包没有收到这个 Intent。
Android 2.2 添加了getExternalFilesDir()
,它将指向外部存储上的一个位置,当您的应用程序被卸载时,Android 会自动清理该位置。但是,这仅适用于 Android 2.2,并且有迹象表明它目前运行得不是特别好。但是,在 2011 年要牢记这一点。
除此之外,您真正能做的就是在某处为用户提供一个菜单选项来进行清理,并希望用户在卸载您之前使用它。
【讨论】:
【参考方案2】:你试过了吗?
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
registerReceiver(new UnInstalledReceiver(), filter);
此外,将您的应用程序的文件放在文件夹 android/data/com.boom/
中是一种很好的简单方法,可以确保在用户卸载时清理额外的文件。
【讨论】:
【参考方案3】:你必须在manifast中添加权限。
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
【讨论】:
此权限仅授予系统应用。所以我不能在我的应用中使用它。 这个答案太错误了。需要此权限才能发送广播 IntentPACKAGE_REMOVED
。即使系统会授予您此权限(它不会),它仍然无济于事。这个答案应该被删除。以上是关于android 在已删除的包中没有收到 Intent ACTION_PACKAGE_REMOVED的主要内容,如果未能解决你的问题,请参考以下文章