Android MediaStore.Files.FileColumns.DATA已被弃用,改用什么?
我正在创建一个应用程序,其中列出了用户库中最近的图像和视频,并使用文件路径将它们显示在RecyclerView上。下面的代码适用于Android 7,但Android Studio警告说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
// 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
可以访问但您的应用程序无法访问的图像将失败。