2017-02-12 8 views
15

Ich benutze James Montemagno's Media Plugin um Fotos zu machen.Xamarin Forms - Media Plugin - Leere Thumbnails am Telefon

Aus irgendeinem Grund und nur beim Ausführen der Anwendung auf dem Telefon werden beim Erstellen von Fotos Miniaturansichten in TestFolder korrekt angezeigt, sie werden jedoch als leere Dateien angezeigt.

Bilder werden korrekt angezeigt, wenn sie im Emulator ausgeführt werden.

Dies ist mein Code:

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:

Kurz gesagt, aus irgendeinem Grund die Medien-Plugin nicht auf meinem Handy funktioniert (Huawei P8 Lite). Ich habe die Probe auf GitHub versucht: (Verwendung)

https://github.com/jamesmontemagno/MediaPlugin 

Fotos im Emulator zeigen sich aber nicht am Telefon (die Kamera öffnet und nimmt Fotos). Wie ich oben erwähnt habe, wenn ich auf den Albumordner zugreife, erscheinen leere Thumbnails.

bearbeiten 2

Dies ist die Android-Manifest-Datei:

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

Auch habe ich hinzugefügt:

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

Beide Berechtigungen erteilten zurückzukehren.

bearbeiten 3

ich auf einem Samsung Galaxy A3 versucht haben und perfekt funktioniert, zeigt korrekt in der Kamerarolle und der App.

Aber wie Bilder erscheinen auf meinem Huawei P8 Handy-Kamera Roll Album:

enter image description here

bearbeiten 4

ich auf einem anderen Huawei P8 Gerät versucht haben und ich immer das gleiche Problem .

+0

Der Fehler tritt sowohl bei iOS als auch bei Android auf? – apineda

+0

Ich kann es nur auf Android testen. – rauland

+0

Haben Sie die Manifest-Berechtigung hinzugefügt? –

Antwort

2

Um das Problem zu lösen, ich gesetzt:

PhotoSize = PhotoSize.Small 

Auf StoreCameraMediaOptions:

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

Aber anstatt zu AlbumPath der Bindung I binden an Pfad:

Eigentum von Viewmodel (PRISM Verwendung für 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> 

Ich erkennen, dass, wenn ich eine Verzögerung nach dem Foto aufgenommen wurde hinzugefügt:

await Task.Delay(5000) 

Bilder in der Kamerarolle Ordnern angezeigt werden sollten beginnen, aber auch dann, zeigte das Bild auf dem Bildschirm nicht.

Nachdem am Ausgang Bildschirm in Visual Studio suchen, bemerkte ich diese Meldung:

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

Dann habe ich gemerkt, dass das Problem auf die Bildgröße verwandt war, sondern auch die Bildgröße zu klein auf StoreCameraMediaOptions Einstellung, es machte keinen Unterschied.

Es scheint, dass nur die Größenänderung auf die interne Anwendungsspeicher Bild gilt und nicht die in der Kamerarolle Ordner gespeichert ein.

Sobald das Bild verkleinert wurde, wird das Foto in der Anwendung korrekt angezeigt.

+0

Es scheint, Foto-Größenänderung mit PhotoSize. "Klein" wird nur auf das Foto angewendet, das sich in der Eigenschaft "Pfad" befindet. Nach mehreren Tests scheint es nur zu gelten, wenn SaveToAlbum wahr ist. – rauland