Фон
Я хочу иметь возможность поделиться некоторыми файлами (через намерение отправки) как один сжатый файл, через FileProvider .
Для намерения, все, что вы делаете, это добавляете ArrayList<Uri>
в качестве параметра, например:
ArrayList<Uri> uris = MyFileProvider.prepareFileProviderFiles(...)
sharingIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
Проблема
FileProvider может использоваться для доставки реальные файлы для внешних приложений.
Я не хочу, чтобы в моем приложении оставались какие-либо ненужные файлы (сжатые, предназначенные только для общего доступа) без какой-либо цели, на случай, если приложение, которое их использовало, завершило работу, зависло или остановилосьпо какой-то причине.
Что я нашел
В соответствии с API FileProvider, я должен реализовать реальную обработку файлов:
По умолчаниюFileProvider автоматически возвращает ParcelFileDescriptor для файла, связанного с контентом: // Uri.Чтобы получить ParcelFileDescriptor, вызовите ContentResolver.openFileDescriptor.Чтобы переопределить этот метод, вы должны предоставить свой собственный подкласс FileProvider.
Таким образом, он возвращает ParcelFileDescriptor, но в соответствии со всеми функциями для создания ParcelFileDescriptor мне нужен настоящий файл:
Вопросы
Возможно лион предлагает файл, который на самом деле не существует, но на самом деле является сжатым файлом другого файла?Возможно, поток заархивированного файла?
Если это невозможно, могу ли я как-нибудь избежать этих ненужных файлов?Это значит, что я бы точно знал, что безопасно удалить сжатые файлы, которыми я поделился в прошлом?
Если даже это невозможно, как я могу решить, когда можно их удалить?Просто положить их в папку кеша?Я помню, что папка кеша не всегда автоматически обрабатывается операционной системой, удаляя старые файлы, когда это необходимо.Разве это не правильно?