Правильный способ работы с файлом, выбранный из нового приложения Google Фото - PullRequest
0 голосов
/ 11 февраля 2020

Не дублируется до Выбор фотографии с помощью нового приложения Google Photos не работает

Мое приложение запрашивает файл, который может быть изображением или видео, и мы поддерживаем только некоторые расширения файлов. И так как MediaStore.MediaColumns.Data устарела, я должен go с подходом fileDescriptor, чтобы решить эту проблему. Но я не могу найти способ получить расширение для выбранного файла.

URI, который я получаю после выбора видео в приложении Google Фото, выглядит следующим образом:

content://com.google.android.apps.photos.contentprovider/-1/2/content%3A%2F%2Fmedia%2Fexternal%2Fvideo%2Fmedia%2F25/ORIGINAL/NONE/643532680

Когда я пытаюсь сделать запрос ContentResolver, используя столбец _data, он дает мне исключение IllegalArgumentException, поэтому я использовал приведенный ниже код для сортировки файла во временное местоположение.

String[] str = uri.toString().split("/");
String fileName = str[str.length - 1];
String filePath = context.getFilesDir().getAbsoluteFile() + File.separator + fileName;
File newFile = new File(filePath);
FileDescriptor fileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r").getFileDescriptor();
FileInputStream fis = new FileInputStream(fileDescriptor);
copyFile(fis, newFile);
return filePath;

Итак, как мне получить правильный mimeType для выбранного файла?

PS: я пробовал MimeTypeMap, ContentResolver.getType, но ни один из них не работает.

РЕДАКТИРОВАТЬ: Добавление более подробной информации: я использую API-уровень 29. Запуск приложения на эмуляторе Nexus 6 (API 29). И просто вызывая ACTION_GET_CONTENT, чтобы позволить пользователю выбрать изображение / видео. Также включен URI, который я получаю после выбора фотографии, которая не содержит mimetype (что, как предлагает CommansWare , является нормальным). Когда я вызываю ContentResolver.getType для вышеуказанного URI, я получаю значение NULL.

РЕДАКТИРОВАТЬ 2:

Минимальный код для воспроизведения: Начал намерение, как это:

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("video/*");
startActivityForResult(i,IMAGE_VIDEO_FETCH);

Затем в onActivityResult, проверил mimetype.

Uri media = intent.getData();
this.getContentResolver().getType(media); /// Here it returns null. 
...