texto style entry cajas android xamarin xamarin.android xamarin.forms media

android - style - xamarin forms label multiline



Formularios de Xamarin-Plugin de medios-Miniaturas vacías en el teléfono (1)

Estoy usando el complemento de medios de James Montemagno para tomar fotos.

Por alguna razón, y solo cuando se ejecuta la aplicación en mi teléfono, cuando se toman fotos, las miniaturas aparecen correctamente en TestFolder, pero aparecen como archivos vacíos.

Las imágenes aparecen correctamente cuando se ejecuta en el emulador.

Este es mi código:

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''s 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; }

Editar 1:

En resumen, por alguna razón, el complemento de medios no funciona en mi teléfono (Huawei P8 Lite). Probé la muestra en GitHub: (Uso)

https://github.com/jamesmontemagno/MediaPlugin

Las fotos se muestran en el emulador pero no en el teléfono (la cámara se abre y toma fotos). Como mencioné anteriormente, si tengo acceso a la carpeta del álbum aparecerán miniaturas vacías.

Editar 2

Este es el archivo de manifiesto de 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>

También he agregado:

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]; }

Ambos permisos vuelven como concedidos.

Editar 3

Lo probé con un Samsung Galaxy A3 y funciona perfectamente, se muestra correctamente en el rollo de la cámara y en la aplicación.

Pero así es como aparecen las imágenes en el álbum con la cámara del teléfono Huawei P8:

Editar 4

He probado un dispositivo Huawei P8 diferente y estoy teniendo el mismo problema.


Para resolver el problema, establecí:

PhotoSize = PhotoSize.Small

En StoreCameraMediaOptions:

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

Pero en lugar de vincularme a AlbumPath, enlace a la ruta:

Propiedad de ViewModel (utilizando PRISM para formularios 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>

Me di cuenta de que si añadía un retraso después de tomar la foto:

await Task.Delay(5000)

Las imágenes comenzarían a aparecer en la carpeta del rollo de la cámara, pero incluso entonces, la imagen no se mostraría en la pantalla.

Después de mirar la pantalla de salida en Visual Studio, noté este mensaje:

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

Luego me di cuenta de que el problema estaba relacionado con el tamaño de la imagen, pero incluso configurar el tamaño de la imagen en StoreCameraMediaOptions, no hizo ninguna diferencia.

Parece que el cambio de tamaño solo se aplica a la imagen de almacenamiento interna de la aplicación y no a la almacenada en la carpeta del rollo de la cámara.

Una vez que la imagen cambia de tamaño, la foto se muestra correctamente en la aplicación.