Как я могу передать файл изображения, если у меня есть содержимое изображения URI? - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу использовать библиотеку изменения размера, чтобы сжать несколько фотографий.Библиотека требует от меня передать ей исходный файл.Я выбираю изображение с намерением simpe, и в ответ я получаю содержимое 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 голосов
/ 17 апреля 2019

Я нашел это раньше (не помню где)

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()
        }
    }
}

Назовите это так

val file = File(getRealPathFromUri(context, uri))
...