Android MediaStore.Files.FileColumns.DATA已被弃用,改用什么?

Android MediaStore.Files.FileColumns.DATA已被弃用,改用什么?,android,kotlin,mediastore,Android,Kotlin,Mediastore,我正在创建一个应用程序,其中列出了用户库中最近的图像和视频,并使用文件路径将它们显示在RecyclerView上。下面的代码适用于Android 7,但Android Studio警告说MediaStore.Files.FileColumns.DATA已被弃用。用什么来代替 // Get relevant columns for use later. val projection = arrayOf( MediaStore.Files.FileCo

我正在创建一个应用程序,其中列出了用户库中最近的图像和视频,并使用文件路径将它们显示在RecyclerView上。下面的代码适用于Android 7,但Android Studio警告说MediaStore.Files.FileColumns.DATA已被弃用。用什么来代替

// Get relevant columns for use later.
        val projection = arrayOf(
                MediaStore.Files.FileColumns.DATA
        )

        // Return only video and image metadata.
        val selection = (MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
                + " OR "
                + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO)

        val queryUri: Uri = MediaStore.Files.getContentUri("external")

        val cursorLoader = CursorLoader(
                requireContext(),
                queryUri,
                projection,
                selection,
                null,
                MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order.
        )

        val cursor: Cursor? = cursorLoader.loadInBackground()

        if (cursor!!.moveToFirst()) {
            do {
                val columnIndex = cursor.getColumnIndex(projection[0])
                val filePath = cursor.getString(columnIndex)
                val mimeType = URLConnection.guessContentTypeFromName(filePath)

                if (mimeType != null && mimeType.startsWith("image")) {
                    mediaList.add(GalleryMedia(filePath, "image"))
                } else if (mimeType != null && mimeType.startsWith("video")) {
                    mediaList.add(GalleryMedia(filePath, "video"))
                }

            } while (cursor.moveToNext())
        }
        cursor.close()

查询
ID
而不是
数据
。使用
ContentUris.withAppendedId()
Uri
组合到给定所查询集合和ID的媒体上。将该
Uri
与您喜爱的图像加载库一起使用。作为奖励,这将比您当前的方法更可靠,对于
MediaStore
可以访问但您的应用程序无法访问的图像,此方法将失败。请查询
ID
,而不是
数据
。使用
ContentUris.withAppendedId()
Uri
组合到给定所查询集合和ID的媒体上。将该
Uri
与您喜爱的图像加载库一起使用。作为奖励,这将比您当前的方法更可靠,因为当前的方法对于
MediaStore
可以访问但您的应用程序无法访问的图像将失败。