【问题标题】:android not receiving Intent ACTION_PACKAGE_REMOVED in the removed packageandroid 在已删除的包中没有收到 Intent ACTION_PACKAGE_REMOVED
【发布时间】:2011-04-08 13:40:54
【问题描述】:

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

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

代码是:

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

并且,在清单中:

接收者>

【问题讨论】:

    标签: android android-intent package broadcastreceiver


    【解决方案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。即使系统会授予您此权限(它不会),它仍然无济于事。这个答案应该被删除。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 2021-07-08
        相关资源
        最近更新 更多