我想使用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目录中有一些视频文件。
答案 0 :(得分:0)
问题出在选择参数中。在末尾添加“ %”字符,即为“ myplayer /%” :
new String[]{Environment.getExternalStorageDirectory() + "/myplayer/%"};
这意味着选择以前缀路径开头且在“ myplayer /”之后具有任何字符串的任何文件,在这种情况下为文件名。
表示,请考虑在Android Q(API 29)中不推荐使用DATA字段和Environment.getExternalStorageDirectory()。因此,它们在该版本中将无法正常工作,如果您希望代码在将来的Android版本中运行,则应该已经尝试找到替代方法,例如改为使用 BUCKET_DISPLAY_NAME 。