Intereting Posts
Long.getLong () failing, возвращающий значение null в действительную строку Использование SDK Cardboard в Unity 5 – нет событий касания? Резервное копирование Android-устройства с использованием adb Использование Emacs TRAMP с ssh-сервером, который не предоставляет / bin / sh? API отпечатков пальцев Android и частные / открытые ключи Есть ли способ для push-уведомлений в libGDX (проекты Android и iOS)? Spoof или фальшивое местоположение на телефоне Android Одновременно применять одну анимацию к нескольким представлениям Типы строк не разрешены (в 'id' со значением '@ id / bAdd') Фильтры списка заданий для установленных пакетов В App Purchase: два устройства с одинаковой учетной записью не получают одинаковые купленные предметы ResultReceiver не выдерживает вращения экрана Может ли Firebase Console отправлять данные? Android CoordinatorLayout + AppbarLayout + Viewpager всегда прокрутка Android – Меню переполнения и кнопка «Назад» не отображаются на панели инструментов Collapsing

Android – сохранение или удаление файлов, созданных приложением при удалении

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

Solutions Collecting From Web of "Android – сохранение или удаление файлов, созданных приложением при удалении"

У вашего приложения нет возможности узнать, что он удаляется (без изменения ядра). Все файлы, созданные в data / data / your.app.package, автоматически удаляются после установки.

Я не думаю, что с SD-карты ничего не будет очищено. Вы можете сделать быстрый тест и найти это.

Другой подход может состоять в том, чтобы иметь другое приложение, которое проверяет, установлено это приложение или нет. Если нет, он может выполнить очистку.

Похоже, что с 2009 года произошли некоторые изменения :).

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

Если вы используете API-уровень 8 или выше, используйте getExternalCacheDir() чтобы открыть файл, представляющий каталог внешней памяти, в котором необходимо сохранить файлы кеша. Если пользователь удалит ваше приложение, эти файлы будут автоматически удалены. Однако в течение срока действия вашего приложения вы должны управлять этими файлами кеша и удалять те, которые не нужны для сохранения файлового пространства.

Если вы используете API-уровень 7 или ниже, используйте getExternalStorageDirectory() чтобы открыть файл, представляющий корень внешнего хранилища, а затем записать данные кэша в следующий каталог:

/ Android / data // cache / Это ваше имя пакета в стиле Java, например «com.example.android.app».

Даже при использовании getExternalCacheDir() я видел, что каталог кеша, который является именем вашего приложения, не удаляется автоматически, как говорится в документации на Android, по крайней мере, не на Lenovo A1. Это может быть немного наивно, но вы можете очистить предыдущие данные во время переустановки. Там вы можете узнать, было ли ваше приложение не установлено или установлено в первый раз – вы сохраняете значение, возможно, логическое, используя общие настройки. Это может быть что-то вроде:

 SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE); if(sharedPrefs.getBoolean("AppInstalled", false) == false){ //DELETE APP DIRECTORY SharedPreferences.Editor editor = sharedPrefs.edit(); editor.putBoolean("AppInstalled", true); editor.commit(); } 

Таким образом, каждый раз, когда приложение запускается, он проверяет, запущен ли он в первый раз. Когда приложение будет удалено, так будут общие настройки для приложения. Затем, в следующий раз, когда он будет установлен, значение if (…) будет истинным, и вы сможете немного очистить его.

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

Похоже, с тех пор существует правильное решение, Context.getExternalFilesDir () :

Возвращает абсолютный путь к каталогу во внешней файловой системе (где-то в среде Environment.getExternalStorageDirectory ()), где приложение может размещать постоянные файлы, которыми он владеет. Эти файлы являются частными для приложений и не являются обычно видимыми для пользователя в качестве носителя.

Это похоже на getFilesDir (), поскольку эти файлы будут удалены при удалении приложения

Я добавляю это, потому что существующие ответы устарели в 2017 году. Хотя верно, что нет обратного вызова при удалении приложения, некоторые механизмы были предоставлены для сохранения данных приложения за пределами удаления.

  • Начиная с Android 6.0 (API 23) была введена функция автоматического резервного копирования для приложений , которая позволила разработчикам разрешить или предотвратить автоматическое резервное копирование приложений. По умолчанию резервное копирование API 23 включено по умолчанию.

  • Для файла манифеста были введены два новых android:allowBackup : android:allowBackup and android:fullBackupContent .

Чтобы отказаться от автоматического резервного копирования, добавьте android:allowBackup="false" в файл манифеста в теге application . Значение «true» автоматически сохраняет общие настройки и базы данных в облаке, а также в других файлах .

Во-вторых, вы можете быть очень конкретным о файлах, которые хотите включить или исключить для удаления или сохранения при удалении с тегом android:fullBackupContent . Этот атрибут указывает на XML-файл, содержащий правила резервного копирования. Создайте файл конфигурации XML в каталоге res/xml/ со следующим синтаксисом:

 <full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> </full-backup-content> 

Здесь вы можете добавить конкретные типы файлов для включения или исключения и связанные с ними пути. Добавьте android:fullBackupContent = "@xml/my_backup_rules" в файл манифеста в теге application .

Указанные файлы будут скопированы на Google Диск в основной учетной записи электронной почты устройства. Данные будут восстановлены при повторной установке, если пользователь включит следующую настройку :

Settings -> Backup & Reset -> Automatic Restore .

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

Введите описание изображения здесь

То же самое можно получить из приложения Google Диска:

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

Введите описание изображения здесь

Стоит отметить, что если одна и та же основная учетная запись Google используется для нескольких устройств, создается несколько резервных копий устройств. Доступ к резервным копиям для отдельных устройств можно получить здесь:

Google Drive -> Settings -> Backups

Google Диск -> Настройки -> Резервные копии

Если вы хотите хранить большие данные, сохраните их во внешнем хранилище с именем пути к файлу, таким как

 Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName" 

Где имя пакета – это имя вашего приложения, например com.think.abc