Мое приложение управляет различными типами файлов (текстовые документы, изображения, текст, ...) и имеет возможность обмениваться ими, открывать и получать их. Это реализовано с помощью пользовательского ContentProvider
, используя его метод openFile(Uri uri, String mode)
. Недавно я реализовал хранение файлов на внешнем хранилище, зашифровав их с помощью Android EncryptedFile
. В итоге я реализовал смесь решений из этого вопроса :
- Если режим файла содержит "w", создайте канал с помощью
ParcelFileDescriptor.createPipe(...)
, подключите один конец к поток записи и возврат стороны записи. - В противном случае создайте незашифрованную копию файла во внутреннем хранилище и верните ее через
ParcelFileDescriptor.open(...)
.
. Это работает, но подход с Временный файл имеет несколько проблем:
- Если я удаляю файл при вызове
ParcelFileDescriptor.OnCloseListener
s onClose(...)
, я могу закончить создание временного файла несколько раз, так как openFile(...)
может быть вызвано несколько раз. Это может быть очень медленно для больших файлов. - Если я реализую удаление временных файлов позже, чтобы временный файл мог повторно использоваться при вызове
openFile(...)
, мне нужно выполнить какую-то проверку, так как содержимое оригинального файла, возможно, изменился за это время. По сути, это кеширование, которое является одной из наиболее сложных проблем в области компьютерных наук.
Есть ли лучший способ обработки зашифрованных файлов? Или это на данный момент лучший?