从Android中的Mediastore查询中获取数据时,Cursor返回null

时间:2019-07-19 13:06:15

标签: android file mediastore

我想使用MediaStore Query从特定文件夹中获取文件数据,但返回的光标结果始终为空。

我尝试使用MediaStore查询

File file = new File(Environment.getExternalStorageDirectory() + "/myplayer/");
if (file.isDirectory())
{
        Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        String[] projection = { MediaStore.Video.Media._ID
                MediaStore.Video.Media.DURATION,
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.SIZE, MediaStore.Video.Media.ALBUM 
        };
        String selection = MediaStore.Video.Media.DATA + " like?";
        String[] selectionArgs = new String[]{Environment.getExternalStorageDirectory() + "/myplayer/"};
        Cursor cursor = ctx.getContentResolver().query(uri, projection, selection, selectionArgs, null);

        if ((cursor != null))
        {
            Log.d("trace cursor", "not null");
            Log.d("trace count", "" + cursor.getCount());
        }
  }

根据以下代码,光标的数量始终为0,但是myplayer目录中有一些视频文件。

1 个答案:

答案 0 :(得分:0)

问题出在选择参数中。在末尾添加“ ”字符,即为“ myplayer /%”

new String[]{Environment.getExternalStorageDirectory() + "/myplayer/%"};

这意味着选择以前缀路径开头且在“ myplayer /”之后具有任何字符串的任何文件,在这种情况下为文件名。

表示,请考虑在Android Q(API 29)中不推荐使用DATA字段和Environment.getExternalStorageDirectory()。因此,它们在该版本中将无法正常工作,如果您希望代码在将来的Android版本中运行,则应该已经尝试找到替代方法,例如改为使用 BUCKET_DISPLAY_NAME