如何获取视频文件的详细信息,例如在Android中的持续时间



我很难从之前录制的文件中获得特定的视频文件详细信息,比如持续时间等。我目前所能做的就是用所有文件获得cursor,然后一个接一个地循环。

Cursor cursor = MediaStore.Video.query(getContext().getContentResolver(), MediaStore.Video.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Video.VideoColumns.DURATION,MediaStore.Video.VideoColumns.DATE_TAKEN,MediaStore.Video.VideoColumns.RESOLUTION,MediaStore.Video.VideoColumns.DISPLAY_NAME});

                    if(cursor.moveToFirst())
                        while(!cursor.isLast()){
                                if(cursor.getString(3)==fight.filename)
                                {
                                    // do something here
                                }
                                cursor.moveToNext();
                        }

然而,我需要访问特定文件的详细信息,所以我尝试创建URI,但没有成功,因为返回的cursor总是null。我哪里错了?

                Uri uri = Uri.parse(Environment.DIRECTORY_DCIM+"/FightAll_BJJ_Scoring/"+(fight.filename));
                Cursor cursor = MediaStore.Video.query(getContext().getContentResolver(), uri, new String[]{MediaStore.Video.VideoColumns.DURATION,MediaStore.Video.VideoColumns.DATE_TAKEN,MediaStore.Video.VideoColumns.RESOLUTION,MediaStore.Video.VideoColumns.DISPLAY_NAME});
                // cursor is always null here

编辑:多亏了下面的zapl答案,我得到了下面的代码(注意我修改了光标行),但现在返回的光标不是空的,但它仍然是空的,当我尝试读取cursor.getString(2)时,我什么都没有得到。

Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                    String selection = MediaColumns.DATA + "=?";
                    String[] selectionArgs = { Environment.DIRECTORY_DCIM+"/FightAll_BJJ_Scoring/"+(fight.filename) };
                    Cursor cursor = getContext().getContentResolver().query(uri, new String[]{MediaStore.Video.VideoColumns.DURATION,MediaStore.Video.VideoColumns.DATE_TAKEN,MediaStore.Video.VideoColumns.RESOLUTION,MediaStore.Video.VideoColumns.DISPLAY_NAME}, selection, selectionArgs, null);

任何帮助都将不胜感激。

您的uri是错误的。媒体数据库不知道如何解析路径,因此必须使用所需路径查询项目。这就像下面的代码一样(可能包含错误,因为我直接在这里写的)。

Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String selection = MediaColumns.DATA + "=?";
String dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath();
String[] selectionArgs = { dcim+"/FightAll_BJJ_Scoring/"+(fight.filename) };
Cursor cursor = MediaStore.Video.query(getContext().getContentResolver(), uri, new String[]{MediaStore.Video.VideoColumns.DURATION,MediaStore.Video.VideoColumns.DATE_TAKEN,MediaStore.Video.VideoColumns.RESOLUTION,MediaStore.Video.VideoColumns.DISPLAY_NAME}, selection, selectionArgs, null);

最新更新