Android не получает Intent ACTION_PACKAGE_REMOVED в удаленной упаковке

Когда мое приложение для Android будет удалено, я также хотел бы удалить файлы, созданные на SD-карте, поскольку они могут потреблять много мегабайт и могут использоваться только для моего приложения.

Кажется, что получение УДАЛЕННОГО УСТАНАВЛИВАНИЯ было бы местом для этого. Тем не менее, мой широковещательный приемник никогда не вызывается - он, кажется, был удален до отправки PACKAGE REMOVED намерения

Код:

public class UninstallReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  String action= intent.getAction();
  Log.i("U", "ACTION " + action);
  etc.
 }
}

и в манифесте:

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

Ответ 1

В документации говорится:

Пакет, который удаляется, не получает этого намерения.

Android 2.2 добавил getExternalFilesDir(), который укажет на место на внешней памяти, которое Android будет автоматически очищать, когда ваше приложение будет удалено. Тем не менее, это только для Android 2.2, и есть признаки того, что он не работает особенно хорошо на данный момент. Тем не менее, это то, что нужно учитывать в 2011 году.

Кроме того, все, что вы действительно можете сделать, это предложить выбор из меню, где пользователь может выполнить очистку, и надеюсь, что пользователи будут использовать его перед удалением.

Ответ 2

Вы должны добавить разрешение в манифест.

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