我创建了一个函数来获取视频。
在Java中
问题在于默认相机应用程序创建的视频不会显示在任何路径中,例如“DCIM”、“WhatsApp 视频”等。使用我的应用程序创建的每个视频都将被正确插入,但默认相机应用程序创建的视频除非我先打开它们,否则不会被正确插入。
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 11
开始,DATE_ADDED
将不再起作用,您必须使用DATE_TAKEN
。因此,基本上您的答案是正确的,但对于 android 11 来说不适用(对我来说它可以工作,但有时cursor.getString(dateTakenColumn)
会抛出空指针异常)! - Vivek Thummar