Сохраняйте данные приложения и повторно используйте их, даже если приложение удалено и установлено снова (с помощью Android 11, API 30)

#android

Вопрос:

Похоже, Android 11 спроектирован таким образом, что либо приложение удаляет свои данные при удалении, либо приложение хранит данные на удаленном сервере.

Но мои требования к приложениям отличаются:

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

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

Когда приложение удалено, данные на устройстве не удаляются.

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

Но при попытке прочитать файл Android выдает ошибку/исключение, что файл не может быть прочитан.

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

Итак, похоже, проблема в следующем: когда приложение устанавливается снова, это новый пользователь в системе, и поскольку он не является владельцем файлов, созданных в результате предыдущей установки приложения, Android выдает ошибку/исключение.

Итак, есть ли какое-нибудь решение?

Или, может быть, Android 11 спроектирован таким образом, что либо приложение удаляет свои данные при удалении, либо приложение хранит данные на удаленном сервере?

Ответ №1:

Но при попытке прочитать файл Android выдает ошибку/исключение, что файл не может быть прочитан.

Ваш вопрос не содержит никакого исходного кода. Мое предположение, основанное на вашем описании, состоит в том, что вы пытаетесь получить доступ к содержимому с помощью API файловой системы (например, File ). В этом случае такое поведение ожидается. По умолчанию входящие файлы Documents/ являются закрытыми для приложения, и Android считает «более старую установку» и «текущую установку» одного и того же идентификатора приложения разными приложениями.

Итак, есть ли какое-нибудь решение?

Для произвольных типов контента используйте Платформу доступа к хранилищу (например, ACTION_CREATE_DOCUMENT , ACTION_OPEN_DOCUMENT , ACTION_OPEN_DOCUMENT_TREE ) как для первоначального создания контента, так и для последующего доступа к нему. Позвольте пользователю решить, где на устройстве пользователя (или в облачном хранилище пользователя) ваше приложение должно размещать контент пользователя. Контент, созданный таким образом, также сохраняется после установки приложения, и пользователь может направить установку вашего нового приложения на работу с контентом из вашей старой установки приложения.