Selektor multimediów do zdjęć i filmów wideo
W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). IMediaPicker Ten interfejs pozwala użytkownikowi wybrać lub zrobić zdjęcie lub wideo na urządzeniu.
Domyślna implementacja interfejsu IMediaPicker
jest dostępna za pośrednictwem MediaPicker.Default właściwości . Zarówno interfejs, jak IMediaPicker
i MediaPicker
klasa są zawarte w Microsoft.Maui.Media
przestrzeni nazw.
Rozpocznij
Aby uzyskać dostęp do funkcji selektora multimediów, wymagana jest następująca konfiguracja specyficzna dla platformy.
Uprawnienie CAMERA
jest wymagane i musi być skonfigurowane w projekcie systemu Android. Dodatkowo:
Jeśli aplikacja jest przeznaczona dla systemu Android 12 lub starszego, musisz zażądać
READ_EXTERNAL_STORAGE
uprawnień iWRITE_EXTERNAL_STORAGE
.Jeśli aplikacja jest przeznaczona dla systemu Android 13 lub nowszego i wymaga dostępu do plików multimedialnych utworzonych przez inne aplikacje, musisz zażądać co najmniej jednego z następujących szczegółowych uprawnień nośników zamiast
READ_EXTERNAL_STORAGE
uprawnień:READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Te uprawnienia można dodać w następujący sposób:
Dodaj uprawnienia oparte na zestawie:
Otwórz plik Platformy/Android/MainApplication.cs i dodaj następujące atrybuty zestawu po
using
dyrektywach:// 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)]
- lub -
Zaktualizuj manifest systemu Android:
Otwórz plik Platformy/Android/AndroidManifest.xml i dodaj następujący kod w węźle
manifest
:<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" />
- lub -
Zaktualizuj manifest systemu Android w edytorze manifestu:
W programie Visual Studio kliknij dwukrotnie plik Platformy/Android/AndroidManifest.xml , aby otworzyć edytor manifestu systemu Android. Następnie w obszarze Wymagane uprawnienia sprawdź uprawnienia wymienione powyżej. Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .
Jeśli docelowa wersja systemu Android projektu jest ustawiona na Android 11 (R API 30) lub nowszą, musisz zaktualizować manifest systemu Android za pomocą zapytań, które korzystają z wymagań dotyczących widoczności pakietów systemu Android.
W pliku Platformy/Android/AndroidManifest.xml dodaj następujące queries/intent
węzły w węźlemanifest
:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Korzystanie z selektora multimediów
Interfejs IMediaPicker zawiera następujące metody, które zwracają FileResultelement , który może służyć do pobrania lokalizacji pliku lub odczytania go.
PickPhotoAsync
Otwiera przeglądarkę multimediów, aby wybrać zdjęcie.CapturePhotoAsync
Otwiera aparat, aby zrobić zdjęcie.PickVideoAsync
Otwiera przeglądarkę multimediów, aby wybrać film wideo.CaptureVideoAsync
Otwiera kamerę, aby zrobić wideo.
Każda metoda opcjonalnie przyjmuje MediaPickerOptions typ parametru, który umożliwia Title ustawienie elementu w niektórych systemach operacyjnych, który jest wyświetlany użytkownikowi.
Ważne
Wszystkie metody muszą być wywoływane w wątku interfejsu użytkownika, ponieważ kontrole uprawnień i żądania są automatycznie obsługiwane przez program .NET MAUI.
Robić zdjęcie
Wywołaj metodę CapturePhotoAsync , aby otworzyć aparat i pozwolić użytkownikowi zrobić zdjęcie. Jeśli użytkownik robi zdjęcie, zwracana wartość metody będzie wartością inną niż null. Poniższy przykładowy kod używa selektora multimediów do wykonania zdjęcia i zapisania go w katalogu pamięci podręcznej:
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);
}
}
}
Napiwek
Właściwość FullPath nie zawsze zwraca ścieżkę fizyczną do pliku. Aby pobrać plik, użyj OpenReadAsync metody .