android - 在 Android 10 中从 Uri 获取绝对路径

标签 android android-10.0 storage-access-framework imebra

我正在尝试集成 Imebra 库以在应用程序中加载 .dcm 文件。问题是,根据文档,我需要将文件的绝对路径传递给 Imebra,如下所示:

val loadDataSet = CodecFactory.load("myFile.dcm")

为了打开 DCM 文件,我使用以下代码:

 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                addCategory(Intent.CATEGORY_OPENABLE)
                type = "*/*"
                putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
            }

            startActivityForResult(intent, RC_OPEN_FILES)

我可以使用以下代码获取所有选定文件的 URI 列表:

 if (data != null) {
                val clipData = data.clipData
                if (clipData != null) {
                    // Multiple files selected
                    val clipDataUriList = arrayListOf<Uri>()
                    for (i in 0 until clipData.itemCount) {
                        clipDataUriList.add(clipData.getItemAt(i).uri)
                    }
                    processDcmFiles(clipDataUriList)
                } else {
                    // Single file selected
                    data.data?.let { processDcmFiles(arrayListOf(it)) }
                }

            }

我尝试使用 uri.getPath() 并使用 URI 创建一个 File,然后获取绝对路径,但它们似乎都不起作用。

我不确定这是否是获取 Android 10 中文件绝对路径的正确方法。我们将不胜感激。

最佳答案

此示例应用程序使用文件选择器打开和显示文件: https://github.com/binarno/Imebra-V5-Android-Simple-Dicom-Viewer

应用程序将文件的打开和加载(如有必要)委托(delegate)给 Android,然后通过 Imebra Pipes 将文件传递给 Imebra .

虽然稍微复杂一些,但它允许 Imebra 也可以从外部来源(例如 Google 云端硬盘)读取文件。

免责声明:我是 Imebra 的作者

关于android - 在 Android 10 中从 Uri 获取绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60487645/

相关文章:

java - 无法在android中将uri转换为位图

android - 上传我的应用程序时出现此错误 : Upload failed You need to use a different version code for your APK than version code 1

Android不确定进度作为ImageView源

Android 10(api 29)camera2 api回归与广角相机

android - 未找到处理 Intent 的 Activity - android.intent.action.OPEN_DOCUMENT

android - 未找到 UID 10208 [安全异常] 的持久权限授予

android - RecyclerView 在使用 Runnable 从 Handler 使用 notifyItemChanged 时崩溃 [IllegalArgumentException]

android - 如何在android中更改APP内容而不需要更新您的软件版本

android-10.0 - ng serve 在使用 copy-webpack-plugin (Android OS/termux) 处理附加 Assets 时永远卡在 92%

android - 在 Android Q 上使用 Glide 显示来自具有 "content://"方案的 URI 的图像