2017-02-12 11 views
15

Używam wtyczki medialnej Jamesa Montemagno'a do robienia zdjęć.Xamarin Forms - Media Plugin - Puste miniatury na telefonie

Z jakiegoś powodu i tylko podczas uruchamiania aplikacji na moim telefonie, podczas robienia zdjęć miniatury pojawiają się poprawnie w folderze TestFolder, ale pojawiają się jako puste.

Obrazy pojawiają się poprawnie podczas pracy w emulatorze.

To jest mój kod:

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

Edit 1:

W skrócie, z jakiegoś powodu media plugin nie działa na moim telefonie (Huawei P8 Lite). Próbowałem próbkę na GitHub:

https://github.com/jamesmontemagno/MediaPlugin 

Zdjęcia są wyświetlane w emulatorze Ale nie przez telefon (aparat otwiera i robi zdjęcia) (Usage). Jak wspomniałem powyżej, jeśli mam dostęp do folderu z albumami, pojawiają się puste miniatury.

Edycja 2

To android plik manifestu:

<?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> 

także Dodałem:

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

Oba uprawnienia powrócić jako pewnik.

Edycja 3

Próbowałem na Samsung Galaxy A3 i działa idealnie, pokazuje poprawnie w rolki aparatu i aplikacji.

Ale to jak wyglądają zdjęcia na rolce aparatu albumu mojego Huawei P8 telefonu:

enter image description here

Edycja 4

Próbowałem na innym urządzeniu Huawei P8 i otrzymuję ten sam problem .

+0

Błąd występuje zarówno w systemie iOS, jak i Android? – apineda

+0

Jestem w stanie przetestować go tylko na Androidzie. – rauland

+0

Czy dodałeś manifest do pozwolenia? –

Odpowiedz

2

Aby rozwiązać ten problem I set:

PhotoSize = PhotoSize.Small 

Na StoreCameraMediaOptions:

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

Ale zamiast do wiązania AlbumPath wiążę na ścieżce:

nieruchomości z ViewModel (Korzystanie PRISM dla Xamarin Forms):

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


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

zdałem sobie sprawę, że jeśli I dodaje zwłoki po Zrobione:

await Task.Delay(5000) 

obrazy zaczną pojawiać się w folderze rolki aparatu, ale nawet wtedy, obraz nie pokazują się na ekranie.

Po patrząc na ekran wyjściowy w Visual Studio, zauważyłem tę wiadomość:

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

Później zrozumiałem, że problem wiązał się rozmiar, ale nawet ustawienie rozmiaru obrazu do małych na StoreCameraMediaOptions, to nie robiło to różnicy.

Wygląda na to, że zmiana rozmiaru dotyczy tylko wewnętrznego obrazu aplikacji, a nie pliku przechowywanego w folderze z rolami aparatu.

Po zmianie rozmiaru zdjęcie jest prawidłowo wyświetlane w aplikacji.

+0

Wydaje się, że zmienia rozmiar zdjęcia przy użyciu funkcji PhotoSize. Mały jest stosowany tylko do zdjęcia znajdującego się we właściwości "Ścieżka". Po wykonaniu kilku testów wydaje się, że ma ono zastosowanie tylko wtedy, gdy SaveToAlbum jest prawdziwe. – rauland

Powiązane problemy