2

以前に記録されたファイルから期間などの特定のビデオファイルの詳細を取得するのに苦労しています。私が現在できることはcursor、すべてのファイルを取得してから、1つずつループすることだけです。

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れる運が常にありません。どこが間違っているのですか?cursornull

                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回答のおかげで、以下のコードを取得しました(カーソル行を変更したことに注意してください)が、返されるカーソルはnullではありませんが、まだ空であり、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);

どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたのウリは間違っています。メディア データベースはパスを解決する方法を認識していないため、期待するパスを使用してアイテムをクエリする必要があります。これは以下のコードのように機能します (ここに直接記述したため、エラーが含まれている可能性があります)。

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);
于 2012-09-12T21:35:52.660 に答える