Udostępnij za pośrednictwem


Selektor multimediów do zdjęć i filmów wideo

Browse sample. Przeglądanie przykładu

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ń i WRITE_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 Platforms/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 Platforms/Android/AndroidManifest.xml i dodaj następujące elementy w węźlemanifest:

    <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 Platforms/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 Platforms/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.

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 .