【问题标题】:Cursor returns null when fetching data from Mediastore query in android从 android 中的 Mediastore 查询中获取数据时,光标返回 null
【发布时间】:2019-07-19 13:06:15
【问题描述】:

我想使用 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目录中有一些视频文件。

【问题讨论】:

    标签: android file mediastore


    【解决方案1】:

    问题在于选择参数。在末尾添加'%'字符,所以它是“myplayer/%”

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

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

    也就是说,考虑到 DATA 字段和 Environment.getExternalStorageDirectory() 在 Android Q (API 29) 中已被弃用。因此,它们在此类版本中无法按预期工作,如果您希望您的代码在未来的 Android 版本中工作,您应该已经尝试寻找替代方案,例如改用 BUCKET_DISPLAY_NAME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多