Хранилище МУЛЬТИМЕДИА — запросы только для изображений не дают результатов

#xamarin.android #mediastore

Вопрос:

Я создаю пользовательский экран галереи для своего приложения и хочу отображать только изображения и видео, но когда я настраиваю свой запрос, ничего не возвращается, у меня есть соответствующие разрешения, и я запрашиваю их еще до запуска запроса.

вот упрощенная версия того, что у меня есть:

 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, это должно сработать, не знаю, что не так.

Ответ №1:

Я понял проблему, мне пришлось преобразовать перечисление в int

итак, эта строка:

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

должно было быть:

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

теперь это работает, надеюсь, если кто-то (или будущий я, ПРИВЕТ!) наткнется на это, это им поможет.