MediaStore - 仅查询图像 return 无结果

MediaStore - querying just for images return no results

我正在为我的应用制作一个自定义画廊屏幕,我只想列出图像和视频,但是当我设置查询时,没有任何返回,我有适当的权限,我在查询甚至运行。

这是我所拥有的简化版本:

var galleryItems = new List<string>();
var uri = MediaStore.Files.GetContentUri("external");
var projection = new[]
{
    MediaStore.Images.Media.InterfaceConsts.Id,
    MediaStore.Files.IFileColumns.MediaType,
    MediaStore.Video.IVideoColumns.Duration
};

var selection = $"{MediaStore.Files.IFileColumns.MediaType} = ? OR {MediaStore.Files.IFileColumns.MediaType} = ?";
var selectionArgs = new [] { MediaType.Image.ToString(), MediaType.Video.ToString() } };
var mediaCursor = ContentResolver.Query(uri, projection, selection, selectionArgs, $"{MediaStore.Images.Media.InterfaceConsts.DateTaken} DESC");
var columnIndexId = mediaCursor.GetColumnIndexOrThrow(MediaStore.Images.Media.InterfaceConsts.Id);
var columnIndexMediaType = mediaCursor.GetColumnIndexOrThrow(MediaStore.Files.IFileColumns.MediaType);
var columnIndexDuration = mediaCursor.GetColumnIndexOrThrow(MediaStore.Video.IVideoColumns.Duration);

while (mediaCursor.MoveToNext())
{
    var mediaType = (MediaType)Enum.Parse(typeof(MediaType), mediaCursor.GetString(columnIndexMediaType));

    if (mediaType == MediaType.Image)
    {
        galleryItems.Add($"{MediaStore.Images.Media.ExternalContentUri}/{mediaCursor.GetString(columnIndexId)}");
    }
    else
    {
        galleryItems.Add($"{MediaStore.Video.Media.ExternalContentUri}/{mediaCursor.GetString(columnIndexId)}");
    }
}

根据我在 android 文档中看到的内容,这应该有效,但不确定哪里出了问题。

我发现了问题,我不得不将枚举转换为 int

所以这一行:

var selectionArgs = new [] { MediaType.Image.ToString(), MediaType.Video.ToString() } };

应该是:

var selectionArgs = new [] { $"{(int)MediaType.Image}", $"{(int)MediaType.Video}" } };

现在它可以工作了,希望如果有人(或者未来的我,嗨!)偶然发现这个,它会对他们有所帮助。