22

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

+0

Приложение 'NQ Mobile Security' звонит в активность на деинсталлировать взгляд на http://i.imgur.com/ Fos9N.png, http://i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png и вопрос http://stackoverflow.com/questions/10219328/how-to- show-an-activity-before-my-app-is-uninstalled-android –

ответ

10

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

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

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

+0

Приложение «NQ Mobile Security» вызывает операцию при удалении, посмотрев http://i.imgur.com/Fos9N.png, http: //i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png и вопрос http://stackoverflow.com/questions/10219328/how-to-show-a-activity-before-my-app-is-uninstalled-android –

+0

Для приложений, скомпилированных для Android 6.0 или более поздних версий и поддерживаемых облачных резервных копий, см. ответ Y.S. – dermatthias

23

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

Из documentation:

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

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

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

0

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

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

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

4

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

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

+0

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

3

, кажется, с тех пор существует собственный soltuion, Context.getExternalFilesDir():

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

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

3

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

  • Поскольку Android 6,0 ​​(API 23), функция Auto Backup for Apps была введена, что позволило разработчикам либо разрешение или запретить автоматическое резервное копирование приложений. По умолчанию резервное копирование API 23 включено по умолчанию.

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

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

Во-вторых, вы можете быть очень конкретную информацию о файлах, которые вы хотите включают или исключить для удаления или сохранения при удалении с 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

+1

Отличный ответ. Он смотрел именно на это. В 2017 году (или с Android 6.0) это правильный ответ. – dermatthias

+1

@ Y.S. идеальный ответ: D –