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