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" />

【讨论】:

此权限仅授予系统应用。所以我不能在我的应用中使用它。 这个答案太错误了。需要此权限才能发送广播 Intent PACKAGE_REMOVED。即使系统会授予您此权限(它不会),它仍然无济于事。这个答案应该被删除。

以上是关于android 在已删除的包中没有收到 Intent ACTION_PACKAGE_REMOVED的主要内容,如果未能解决你的问题,请参考以下文章

如何从用户定义的包中正确导入宏?

如何启动在与小部件不同的包中定义的活动?

R:在自编写的包中使用magrittr管道运算符

在包中覆盖“defun”

Android编译时动态替换Jar包中的类

Git - 为啥在已删除文件上运行命令时需要双破折号?