Medienauswahl für Fotos und Videos
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
undWRITE_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.
PickPhotoAsync
Öffnet den Medienbrowser, um ein Foto auszuwählen.CapturePhotoAsync
Öffnet die Kamera, um ein Foto aufzunehmen.PickVideoAsync
Öffnet den Medienbrowser, um ein Video auszuwählen.CaptureVideoAsync
Öffnet die Kamera, um ein Video aufzunehmen.
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.