【问题标题】:How to get video file details eg. duration in Android?如何获取视频文件详细信息,例如。 Android中的持续时间?
【发布时间】:2012-09-12 21:25:46
【问题描述】:

我很难从之前记录的文件中获取特定的视频文件详细信息,例如持续时间等。我目前所能做的就是获取所有文件的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);

任何帮助将不胜感激。

【问题讨论】:

  • 我刚刚注意到你构建的路径也是错误的 :) 你通过Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)see获得DCIM目录

标签: java android api


【解决方案1】:

你的 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);

【讨论】:

  • 谢谢。我使用了您的代码并编辑了我的问题。尽管光标不再为空,但仍然不完全存在:)
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多