Android не получает намерение ACTION_PACKAGE_REMOVED в удаленном пакете

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

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

Код является:

открытый класс UninstallReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Контекст контекста, Намерение намерения) {
  String action= intent.getAction();
  Log.i("U", "ACTION " + action);
  и т.п.
 }
}

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

 

  <получатель android: name = "com.boom.UninstallReceiver">
   <Намерения фильтр>
         
     <данные android: схема = "пакет" />
   
  

3 ответа

В документации сказано:

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

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

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

Вы пробовали это?

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

Кроме того, размещение файлов приложений в папке android / data / com.boom / - хороший простой способ убедиться, что лишние файлы очищаются при удалении пользователями.

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

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
Другие вопросы по тегам