Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

/Android/данные//кэш/ Это ваш Java-стиль имя пакета, например "Com.example.android.app".

Ответ 3

Даже при использовании 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 (...) будет истинным, и вы сможете немного очистить его.

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

Ответ 4

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

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

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

Ответ 5

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

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

  • Для файла манифеста были добавлены два новых тега application: android:allowBackup и 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 Диск - > Настройки - > Резервные копии

Ответ 6

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

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

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