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

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

6 ответов


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

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

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


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

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

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

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

/Android/данные//кэш/ Это ваш Java-стиль имя пакета, например "com.образец.андроид.приложение."


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

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


я добавляю это, потому что существующие ответы устарели в 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.

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

enter image description here

то же самое можно получить от приложение Google Drive отсюда:

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

enter image description here

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

Google Drive -> Settings -> Backups

Google Drive -> Settings -> Backups


кажется, с тех пор есть soltuion, контексте.getExternalFilesDir():

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

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


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

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

где имя пакета - это имя пакета приложения, например com.думать.abc