如果我有图像的内容uri,如何传递图像文件?

时间:2019-04-17 07:13:54

标签: android image file kotlin uri

我想使用调整大小的库来压缩一些照片。该库要求我将源文件传递给它。我选择具有简单意图的图像,得到的是这样的内容Uri:

content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F96/ORIGINAL/NONE/2013194373

但是,当我将其放入File()内时,它崩溃并显示以下错误 Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference

如何将内容uri转换为文件功能的有效路径? 我曾尝试过以其他方式使用Uri.parse,但无法弄清楚。

我还试图弄乱内容解析器,但不知道如何使它失效。

如果可能的话,我很感谢Kotlin的帮助,但也可能会用Java理解它。

1 个答案:

答案 0 :(得分:0)

我是在一段时间之前发现的(我不记得在哪里了)

ClassC classC = new ClassC();
ClassA<ClassB> classA = new ClassA<ClassB>();
classC.Add(classA);

这样称呼

private fun getRealPathFromUri(context: Context, contentUri: Uri): String {
    var cursor: Cursor? = null
    try {
        val proj = arrayOf(MediaStore.Images.Media.DATA)
        cursor = context.contentResolver.query(contentUri, proj, null, null, null)
        val columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
        cursor.moveToFirst()
        return cursor.getString(columnIndex)
    } finally {
        if (cursor != null) {
            cursor.close()
        }
    }
}