Проблема
Я использую этот код для выбора одного файла на устройстве (в основном папка для загрузок).
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = "*/*"
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent,getString(R.string.field_import_btn)), requestCode)
Он работает хорошо, я понимаю Ури, и я могу прочитать файл через contentResolver.openInputStream(uri)
Проблемы возникают, когда мне действительно нужно знать, что это за файл. Другими словами, мне нужно знать, что это расширение.
Для этого я мог бы легко использовать:
String type = resolver.getType(uri);
String extention = MimeTypeMap.getSingleton().getExtensionFromMimeType(type);
Но вот проблема: если формат файла хотя бы немного реже application/octet-stream
как type
.
Пример: SHP
aka Esri Shape file.
Другие наблюдения Находясь в Nokia 8 Android P ie (уровень 28 API)
Фактический URI, который я получаю: content://com.android.providers.downloads.documents/document/1470
В Android 10 эмуляторе для файла того же типа (Shp) я получаю: content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2FRO20.shp
Что я могу использовать, чтобы получить эту последнюю часть ".shp"
Актуальный вопрос Так что в основном у меня есть два вопроса:
- Есть ли способ получить точное расширение файла от Uri (без преобразования mime-типа туда-сюда)?
- Насколько достоверно я могу утверждать, что, начиная с уровня 29 API, я могу просто разобрать расширение файла от Uri самостоятельно, без ошибок?