#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}" } };
теперь это работает, надеюсь, если кто-то (или будущий я, ПРИВЕТ!) наткнется на это, это им поможет.