android - MediaStore 无法在 Kotlin 中列出手机内的所有视频。为什么?
问题描述
我创建了一个获取视频的函数
private val projectionVideo = arrayOf(
MediaStore.Video.Media._ID, //ID
MediaStore.Video.Media.DISPLAY_NAME, //NAME
MediaStore.Video.Media.DATA, //PATH TO CONTENT
MediaStore.Video.Media.DATE_TAKEN, //DATE
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE
)
private fun queryVideos(cr: ContentResolver): Cursor? =
cr.query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projectionVideo, null, null,
MediaStore.Video.Media.DATE_TAKEN + " $SORT_ORDER"
)
在 Java 中
public static Uri getContentUri(String volumeName) {
return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
"/video/media");
}
/**
* The content:// style URI for the internal storage.
*/
public static final Uri INTERNAL_CONTENT_URI =
getContentUri("internal");
/**
* The content:// style URI for the "primary" external storage
* volume.
*/
public static final Uri EXTERNAL_CONTENT_URI =
getContentUri("external");
问题是这个没有在任何路径中显示任何视频,例如“DCIM”、“WhatsApp 视频”等。我使用自己的应用程序创建的每个视频都将被正确插入,这与默认相机应用程序创建的视频不同,除非我先打开它们。
解决方案
您可以使用此代码从Android 共享存储中读取所有视频
private val videoProjection = arrayOf(
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.SIZE,
MediaStore.Video.Media.DATE_ADDED)
context.contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
videoProjection,
null,
null,
"${MediaStore.Video.Media.DATE_ADDED} DESC"
)?.use { cursor ->
while (cursor.moveToNext()) {
//read video attr from cursor
cursor.getLong(cursor.getColumnIndexOrThrow(videoProjection[0])) // read video id
cursor.getString(cursor.getColumnIndexOrThrow(videoProjection[1])) // read video path
// and .....
}
}
推荐阅读
- windows - 检查当前网络连接是否在 Windows 批处理文件中计量
- c# - 这个循环是否有可能无法运行?
- https - 使用 HTTPS 请求发送数据及其成本
- sql - SQL 设置组内所有记录的值
- javascript - 滚动时根据线性渐变背景设置适当的元素颜色
- python-3.x - BeautifulSoup - find_all - 返回空列表
- react-native - 如何在 React Native 中按第一行对齐文本对象
- python - Musixmatch api 响应返回 200 但返回的 json 没有值
- cuda - 在 Cuda 中升级数据
- java - 在列表视图 [Android Studio] 中更新附近未配对的蓝牙设备列表