当前位置: 首页 > 知识库问答 >
问题:

Android 11 kotlin jetpack compose如何将内容Uri转换为文件?

束福
2023-03-14

这是我的密码

 val launcher1 = rememberLauncherForActivityResult(contract =
            ActivityResultContracts.GetContent()) { uri: Uri? ->
                imageUri1 = uri
            }

我必须像这样给视图模型

fun deviceComplete(deviceId: Int?, file:File?) = viewModelScope.launch{
}

如何将这个uri转换成文件..??我真的不知道

共有2个答案

陈志
2023-03-14

你先请求许可了吗?

您可以通过以下方式实现这一目标

val state = rememberPermissionState(permission = Manifest.permission.READ_EXTERNAL_STORAGE

请参阅:https://medium . com/compose-in-the-room/requesting-permissions-with-easy-in-jetpack-compose-using-伴奏者-权限-API-76 D5 d9 ca 5 f 97

戈正初
2023-03-14

此示例用于图像Uri到文件

应用程序。实例-此实例来自Singleton应用程序类

@Suppress("DEPRECATION")
fun Uri.asFile(): File? {
    Application.instance.contentResolver
        .query(this, arrayOf(MediaStore.Images.Media.DATA), null, null, null)
        ?.use { cursor ->
            cursor.moveToFirst()
            val cursorData =
                cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))

            return if (cursorData == null) {
                returnCursorData(this)?.let { File(it) }
            } else {
                File(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)))
            }
        }
    return null
}

@Suppress("DEPRECATION")
private fun returnCursorData(uri: Uri?): String? {
    val context = Application.instance

    if (DocumentsContract.isDocumentUri(context, uri)) {
        val wholeID = DocumentsContract.getDocumentId(uri)
        val splits = wholeID.split(":".toRegex()).toTypedArray()
        if (splits.size == 2) {
            val id = splits[1]
            val column = arrayOf(MediaStore.Images.Media.DATA)
            val sel = MediaStore.Images.Media._ID + "=?"

            val cursor: Cursor? = context.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                column, sel, arrayOf(id), null
            )

            val columnIndex: Int? = cursor?.getColumnIndex(column[0])
            if (cursor?.moveToFirst() == true) {
                return columnIndex?.let { cursor.getString(it) }
            }
            cursor?.close()
        }
    } else {
        return uri?.path
    }
    return null
}
 类似资料:
  • 我在尝试选择文件时获得URI: /外部/文件/15499 我如何将它转换成真实的文件路径? 注意:我阅读了以下主题: null

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 问题内容: 我如何从一个指向那个? 问题答案: 以下代码对我有用(基于[如何从jar中仅获取jarURL:URL中包含“!”和jar中的特定文件?](http://codingdict.com/questions/148394):

  • 问题内容: 我有一个curl命令,用于elasticsearch聚合,如下所示。 我想在浏览器中将以上这些卷曲搜索到我的htmlpage中,如何将其转换为类似Elasticsearch中URI搜索的普通url? 请帮助我将上面的内容转换为url吗? 问题答案: 您可以使用查询字符串参数,以便直接在URL中传递正文

  • 问题内容: 如何使用Java将Dicom文件(.dcm)转换为jpeg图像?这是我的代码: 我在运行项目时遇到以下错误 请帮助并提前感谢 问题答案: 这是使用dcm4che 2将DICOM转换为JPEG的链接 以下是我的代码,效果很好,我将其与导入一起放置,因此可能用完了。 用于运行它的罐子 dcm4che-imageio-2.0.28.jar dcm4che-image-2.0.28.jar j

  • 因此,我有一个网络摄像头功能,可以将base64 URI返回给我,但我无法将其保存到AWS,因为它需要一个图像对象。有没有办法将URI转换成javascript对象?(文件对象与文件浏览器输入标记返回的相同) 我想把这个换成 这件事 可能吗?怎样提前谢谢。。