Есть ли способ создать "постоянный" файл?
Под "постоянным" я подразумеваю, что он сопротивляется опции удаления приложения, которую предлагает ОС Android. Очевидно, вы не можете сделать файл не удаляемым в пользовательском терминале, по крайней мере, пользователь всегда сможет удалить его через файловый менеджер, если он этого пожелает.
Мне нужно это, потому что в моем приложении, когда некоторые действия были выполнены, приложение запрещает делать некоторые другие. Пока что это контролируется с помощью файла, но ничто не мешает пользователю удалить приложение, и при новой новой установке этого больше не происходит.
Я мог бы реализовать некоторый тип логики на стороне сервера, чтобы предотвратить продолжение пользователя, но:
1) Это проще предотвратить, просто проверив файл.
2) Не так важно, что произойдет, если пользователю удастся обойти эту меру безопасности, поэтому я не против, если некоторые из них смогут обойти защиту, если файл может быть "постоянным" и находится в какой-то непонятный каталог, не многие пользователи смогут выполнить упомянутое поведение.
Есть какой-либо способ сделать это?
3 ответа
Просто получите разрешение на запись в файл и запишите файл в корневой каталог. Как описано здесь: https://developer.android.com/training/data-storage/files
После того, как вы запросите разрешения на хранение и убедитесь, что хранилище доступно, вы можете сохранить файлы двух разных типов:
- Публичные файлы: файлы, которые должны быть свободно доступны для других приложений и для пользователя. Когда пользователь удаляет ваше приложение, эти файлы должны оставаться доступными для пользователя. Например, фотографии, сделанные вашим приложением или другими загруженными файлами, должны быть сохранены как общедоступные файлы.
- Личные файлы: файлы, которые по праву принадлежат вашему приложению и будут удалены, когда пользователь удалит ваше приложение. Хотя эти файлы технически доступны пользователю и другим приложениям, поскольку они находятся во внешнем хранилище, они не обеспечивают ценность для пользователя вне вашего приложения.
Это можно сделать, настроив автоматическое резервное копирование, предполагая, что у пользователя это включено.
например, здесь я объяснил, как отключить это поведение в режиме отладки.
прогресс заключается в том, что он работает на нескольких устройствах, привязанных к учетной записи.
Вместо файла я бы предложил использовать следующее намерение, чтобы поймать удаление вашего приложения и поставить вашу логику, чтобы разрешить или запретить удаление
ACTION_PACKAGE_REMOVED -: Broadcast Action: Существующий пакет приложения был удален с устройства. Данные содержат название пакета. Устанавливаемый пакет не получает это намерение.
ACTION_PACKAGE_FULLY_REMOVED -: Broadcast Action: Существующий пакет приложения был полностью удален с устройства. Данные содержат название пакета. Это похоже на ACTION_PACKAGE_REMOVED, но устанавливается только тогда, когда EXTRA_DATA_REMOVED имеет значение true, а EXTRA_REPLACING имеет значение false для этой трансляции.