问题
我正在使用此代码从设备中选择单个文件(主要是下载文件夹)。
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)
它运作良好,我得到了 Uri,并且我能够通过读取文件contentResolver.openInputStream(uri)
当我实际上需要知道这是什么类型的文件时,就会出现问题。换句话说,我需要知道它的扩展名。
为此,我可以轻松使用:
String type = resolver.getType(uri);
String extention = MimeTypeMap.getSingleton().getExtensionFromMimeType(type);
但问题是:如果文件的格式至少application/octet-stream
比type
.
示例:SHP
又名 Esri Shape 文件。
在诺基亚 8 Android Pie(28 api 级别)中的其他观察
我得到的实际uri是:
content://com.android.providers.downloads.documents/document/1470
在相同类型文件(Shp)的 Android 10 模拟器中,我得到:
content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2FRO20.shp
我可以用它自己来获得最后一部分“.shp”
实际问题 所以主要我有两个问题:
- 有没有办法从 Uri 获得确切的文件扩展名(没有来回的 mime 类型转换)?
- 我有多可靠地声明从 29 api 级别开始我可以从 uri 它自己解析文件扩展名而不会失败?