Xamarin Forms - Media Plugin - Пустые эскизы на телефоне

Я использую медиа-плагин Джеймса Монтеманьо, чтобы делать фотографии.

По какой-то причине и только при запуске приложения на моем телефоне при съемке фотоснимков эскизы отображаются правильно в TestFolder, но они отображаются как пустые файлы.

Изображения отображаются правильно при работе в эмуляторе.

Это мой код:

 public async Task<MediaFile> TakePhoto() {
            MediaFile result = null;

            await CrossMedia.Current.Initialize();

            if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported) {
                // Supply media options for saving our photo after it taken.
                var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "TestFolder",
                    Name="test.jpg"
                };

                // Take a photo of the business receipt.
                result = await CrossMedia.Current.TakePhotoAsync(mediaOptions);
            }
            return result;
        }

Изменить 1:

Короче говоря, по какой-то причине плагин Media не работает на моем телефоне (Huawei P8 Lite). Я пробовал образец на GitHub: (Использование)

https://github.com/jamesmontemagno/MediaPlugin 

Фотографии отображаются в эмуляторе, но не на телефоне (камера открывает и фотографирует). Как я упоминал выше, если я получаю доступ к папке альбома, появятся пустые миниатюры.

Изменить 2

Это файл манифеста android:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="15" />
    <application android:label="MediaPluginTests.Droid"></application>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-feature android:name="android.hardware.camera" />
   <uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>

Также я добавил:

   var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
            var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);

            if (cameraStatus != PermissionStatus.Granted || storageStatus != PermissionStatus.Granted) {
                var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera, Permission.Storage });
                cameraStatus = results[Permission.Camera];
                storageStatus = results[Permission.Storage];
            }

Оба разрешения возвращаются как предоставленные.

Изменить 3

Я пробовал Samsung Galaxy A3 и отлично работает, правильно отображается в ролике камеры и приложении.

Но это как изображения появляются на моем альбоме с камерой телефона Huawei P8:

введите описание изображения здесь

Изменить 4

Я попытался использовать другое устройство Huawei P8 и получаю ту же проблему.

Ответ 1

Чтобы решить проблему, я установил:

PhotoSize = PhotoSize.Small

В StoreCameraMediaOptions:

var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "MyDirectory",
                    PhotoSize = PhotoSize.Small
                };

Но вместо привязки к AlbumPath я привязываюсь к Path:

Свойство из ViewModel (использование PRISM для форм Xamarin):

public MediaFile Photo {
            get {
                return photo;
            }
            set {
                SetProperty<MediaFile>(ref photo, value);
            }
    }


<Image Grid.Row="0" Grid.ColumnSpan="2" Source="{Binding Photo.Path}"></Image>

Я понял, что если бы я добавил задержку после того, как была сделана фотография:

await Task.Delay(5000)

Изображения начнут появляться в папке смены камеры, но даже тогда изображение не будет отображаться на экране.

Посмотрев на экран вывода в Visual Studio, я заметил это сообщение:

03-14 10:52:51.808 W/OpenGLRenderer(18106): Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)

Затем я понял, что проблема связана с размером изображения, но даже при установке небольшого размера изображения на StoreCameraMediaOptions это не имеет никакого значения.

Кажется, что изменение размера применяется только к внутреннему хранилищу приложений, а не к папке, хранящейся в папке с камерой.

Как только изображение будет изменено, фотография будет правильно отображаться в приложении.