用例 - 目前我正在开发视频上传模块。为了获取视频,我已经触发了 SAF 视频选择器意图,但即使我已经观看了 Google IO 19 Preparing Scoped Storage Video 但我也无法获得任何方式或代码来从 OnActivityResult 中的 uri 获取视频详细信息,但也没有提供任何示例代码如何要做到这一点。(视频细节意味着持续时间大小名称分辨率和名称)
要获取视频详细信息,我们必须使用推荐的 MediaStore api,如果我传递文件 uri,MediaStore 仅适用于内容 URI,则光标将始终为空,并且我们仅在光标不为空时获取内容 uri
希望有人能帮助我
我正在使用此代码打开视频选择器
private fun openVideoChooser() {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = "video/*"
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 100)
}
在 onActivityResult 中通过传递来自意图的 uri 调用了这个函数-
private fun getVideoDetails(it: Uri) {
var fileName: String? = null
var duration: Long = 0
val projection = arrayOf(MediaStore.Video.VideoColumns.DATA, MediaStore.Video.VideoColumns.DURATION)
val cursor = contentResolver.query(it, projection, null, null, null)
if (cursor != null) {
if (cursor.moveToFirst()) {
fileName = cursor.getString(cursor.getColumnIndexOrThrow(projection[0]))
duration = cursor.getLong(cursor.getColumnIndex(projection[1]))
}
cursor.close()
} else
LogUtil.info("videoInfo ", "Cursor Null :")
if (fileName == null) fileName = "NA"
LogUtil.info("videoInfo ", "Path : $fileName")
LogUtil.info("videoInfo ", "Duration : $duration")
}
已通过互联网搜索解决方案,但没有找到任何解决方案,因此在此处发布。我的测试设备是荣耀 8x(Android 10 版本)