如何从MediaStore获取视频的时长?

3
我使用了这个答案来获取视频的时长,但它对我不起作用。 有人可以告诉我问题出在哪里吗?
感谢任何帮助。
 Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            String[] columns = {MediaStore.Video.VideoColumns.DURATION};
            String selection = MediaStore.Video.VideoColumns.DATA + "=?";
            String selectionArgs[] = {"/data/data/com.test.test/files/video1.mp4"};
            Cursor cursor = context.getContentResolver().query(uri, columns, selection, selectionArgs, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    String duration = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.DURATION));
                }
                cursor.close();
            }

1
要么视频不在数据库中,要么由于某些原因,数据列与您的路径并不完全匹配。为了弄清楚发生了什么,建议您尝试通过删除选择和selectionArgs来获取“MediaStore.Video.Media.EXTERNAL_CONTENT_URI”中的所有条目。您可以更改列以包括DATA列和可能的ID,并使用DatabaseUtils.dumpCursor将内容写入logcat。 - cwbowron
@cwbowron 感谢你的帮助。 - Arman Manucharyan
2个回答

2
如果您已经获得视频的Uri或文件路径,使用MediaMetadataRetriever类可能会更容易。代码示例如下:
MediaMetadataRetriever r = new MediaMetadataRetriever();
r.setDataSource(filePath);
String durString = r.extractMetadata( MediaMetadataRetriever.METADATA_KEY_DURATION );
int duration = Integer.parseInt(durString);

谢谢回复,但我真的需要像这样得到它。 - Arman Manucharyan

1
媒体存储是一个媒体提供程序,包含内部和外部存储设备上所有可用媒体的元数据。我不确定,但您使用的路径可能对MediaStore不可见。如果您正在使用MediaPlayer,请按照以下方式操作...
 MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfYourFile));
 int duration = mp.getDuration();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接