Freigeben über


Medienauswahl für Fotos und Videos

Beispiel durchsuchen.Durchsuchen Sie das Beispiel

In diesem Artikel wird beschrieben, wie Sie die .NET Multi-Platform App UI (.NET MAUI) IMediaPicker-Schnittstelle verwenden können. Über diese Schnittstelle kann ein Benutzer ein Foto oder Video auf dem Gerät auswählen oder aufnehmen.

Die Standardimplementierung der IMediaPicker-Schnittstelle ist über die Eigenschaft MediaPicker.Default verfügbar. Sowohl die IMediaPicker-Schnittstelle als auch die MediaPicker-Klasse sind im Microsoft.Maui.Media-Namespace enthalten.

Erste Schritte

Um auf die Medienauswahl zugreifen zu können, ist die folgende plattformspezifische Einrichtung erforderlich.

Die Berechtigung CAMERA ist obligatorisch und muss im Android-Projekt konfiguriert werden. Außerdem:

  • Wenn Ihre App auf Android 12 oder niedriger ausgerichtet ist, müssen Sie die Berechtigungen READ_EXTERNAL_STORAGE und WRITE_EXTERNAL_STORAGE anfordern.

  • Wenn Ihre App auf Android 13 oder höher ausgerichtet ist und Zugriff auf Mediendateien benötigt, die andere Apps erstellt haben, müssen Sie eine oder mehrere der folgenden präzisen Medienberechtigungen anstelle der Berechtigung READ_EXTERNAL_STORAGE anfordern:

    • READ_MEDIA_IMAGES
    • READ_MEDIA_VIDEO
    • READ_MEDIA_AUDIO

Diese Berechtigungen können auf folgende Weise hinzugefügt werden:

  • Fügen Sie die assemblybasierten Berechtigungen hinzu:

    Öffnen Sie die Datei Platforms/Android/MainApplication.cs und fügen Sie die folgenden Assembly-Attribute nach den using-Direktiven hinzu:

    // Needed for Picking photo/video
    [assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage, MaxSdkVersion = 32)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaAudio)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaImages)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaVideo)]
    
    // Needed for Taking photo/video
    [assembly: UsesPermission(Android.Manifest.Permission.Camera)]
    [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage, MaxSdkVersion = 32)]
    
    // Add these properties if you would like to filter out devices that do not have cameras, or set to false to make them optional
    [assembly: UsesFeature("android.hardware.camera", Required = true)]
    [assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]
    

    – oder –

  • Aktualisieren des Android-Manifests

    Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml und fügen Sie Folgendes im Knoten manifest hinzu:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />    
    <!-- Required only if your app needs to access images or photos that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <!-- Required only if your app needs to access videos that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <!-- Required only if your app needs to access audio files that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />    
    

    - oder -

  • Aktualisieren Sie das Android-Manifest im Manifest-Editor:

    Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die oben aufgeführten Berechtigungen. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.

Wenn die Android-Zielversion Ihres Projekts auf Android 11 (R API 30) oder höher festgelegt ist, müssen Sie Ihr Android Manifest mit Abfragen aktualisieren, die die Paket-Sichtbarkeitsanforderungen von Android verwenden.

Fügen Sie in der Datei Platforms/Android/AndroidManifest.xml die folgenden queries/intent-Knoten im manifest-Knoten hinzu:

<queries>
  <intent>
    <action android:name="android.media.action.IMAGE_CAPTURE" />
  </intent>
</queries>

Verwenden von Medienauswahl

Die IMediaPicker-Schnittstelle hat die folgenden Methoden, die alle ein FileResult zurückgeben, das verwendet werden kann, um den Speicherort der Datei zu ermitteln oder sie zu lesen.

Jede Methode nimmt optional einen MediaPickerOptions-Parametertyp auf, der bei einigen Betriebssystemen die Title-Einstellung ermöglicht, die dem Benutzer angezeigt wird.

Wichtig

Alle Methoden müssen im UI-Thread aufgerufen werden, weil Überprüfungen und Anfragen von Berechtigungen automatisch von .NET MAUI behandelt werden.

Ein Foto aufnehmen

Rufen Sie die Methode CapturePhotoAsync auf, um die Kamera zu öffnen und den Benutzer ein Foto aufnehmen zu lassen. Wenn der Benutzer ein Foto macht, ist der Rückgabewert der Methode ein Wert, der nicht null ist. Das folgende Codebeispiel verwendet die Medienauswahl, um ein Foto aufzunehmen und es im Cache-Verzeichnis zu speichern:

public async void TakePhoto()
{
    if (MediaPicker.Default.IsCaptureSupported)
    {
        FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

        if (photo != null)
        {
            // save the file into local storage
            string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);

            using Stream sourceStream = await photo.OpenReadAsync();
            using FileStream localFileStream = File.OpenWrite(localFilePath);

            await sourceStream.CopyToAsync(localFileStream);
        }
    }
}

Tipp

Die Eigenschaft FullPath gibt nicht immer den physischen Pfad zur Datei zurück. Um die Datei abzurufen, verwenden Sie die OpenReadAsync-Methode.