Сохраните Java.io.File в файловую систему Android на KitKat и выше
Я работаю над приложением, которое сохраняет тепловизионные изображения с камеры FLIR на SD-карту телефона. Я использую Android Marshmallow, и мне нужно использовать FLIR SDK.
В FLIR SDK есть класс "Рамка". У класса есть метод "Frame.save", которому необходим Java.io.File для сохранения теплового изображения: это из документации:
public void save(java.io.File file,
RenderedImage.Palette previewPalette,
RenderedImage.ImageType previewImageType)
throws java.io.IOException,
java.lang.IllegalArgumentException
Сохраняет тепловой файл JPEG с визуализированным предварительным просмотром и встроенными тепловыми данными.
Когда я правильно понимаю, на KitKat или выше я должен использовать Storage Accsess Framework. Так что я использовал это. Отправьте Намерение и верните Ури в выбранную папку на SD-карте. Теперь к хитрой части. Эта функция должна создать файл и вернуть файл Java.io.File, который готов для метода Frame.save.
public File getJavaFile (String Name, Uri myUri) {
DocumentFile pickedDir = DocumentFile.fromTreeUri(context, myUri); // Document file aus URI
DocumentFile DocumentFile = pickedDir.createFile("image/plain", Name + ".jpg" );
File file = new File(DocumentFile.getUri().getPath());
if(file.canWrite()){
Log.d(TAG + "/getJavaFile", "File can write");
}else {
Log.e(TAG + "/getJavaFile", "File cannot write");
}
Log.d(TAG + "/getJavaFile:", "File Created:" + file.getPath());
return file;
}
Файл, который возвращает функция, не доступен для чтения или записи... В противном случае, когда я пытаюсь создать файл напрямую, вот так:
String root = Environment.getExternalStorageDirectory().toString();
File file = new File(root + "/saved_images");
Log.d(TAG, file.getPath());
Тогда система всегда дает мне эту эмулированную папку:
E/MainActivity: /storage/emulated/0/saved_images
Итак, вопрос в том, как получить полезный Java-файл, который хранится в публичном хранилище... Спасибо за ваше время!