Средство выбора мультимедиа для фотографий и видео

Browse sample. Обзор примера

В этой статье описывается, как использовать интерфейс многоплатформенного приложения .NET (.NET MAUI). IMediaPicker Этот интерфейс позволяет пользователю выбирать или принимать фото или видео на устройстве.

Реализация интерфейса по умолчанию IMediaPicker доступна через MediaPicker.Default свойство. Интерфейс IMediaPicker и MediaPicker класс содержатся в Microsoft.Maui.Media пространстве имен.

Начать

Для доступа к функциям средства выбора мультимедиа требуется следующая настройка для конкретной платформы.

Требуется разрешение CAMERA, которое следует настроить в проекте Android. Дополнительно:

  • Если приложение предназначено для Android 12 или более поздней версии, необходимо запросить и WRITE_EXTERNAL_STORAGE разрешенияREAD_EXTERNAL_STORAGE.

  • Если приложение предназначено для Android 13 или более поздней версии и нуждается в доступе к файлам мультимедиа, созданным другими приложениями, необходимо запросить одно или несколько следующих подробных разрешений мультимедиа вместо READ_EXTERNAL_STORAGE разрешения:

    • READ_MEDIA_IMAGES
    • READ_MEDIA_VIDEO
    • READ_MEDIA_AUDIO

Эти разрешения можно добавить следующим образом:

  • Добавьте разрешения на основе сборок:

    Откройте файл Platform/Android/MainApplication.cs и добавьте следующие атрибуты сборки после using директив:

    // 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)]
    

    - или -

  • Обновите манифест Android:

    Откройте файл Platform/Android/AndroidManifest.xml и добавьте в узел следующее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" />    
    

    - или -

  • Обновите манифест Android в редакторе манифеста:

    В Visual Studio дважды щелкните файл Platform/Android/AndroidManifest.xml , чтобы открыть редактор манифеста Android. Затем в разделе "Необходимые разрешения" проверка указанные выше разрешения. Это действие автоматически обновляет файл AndroidManifest.xml.

Если для целевой версии Android проекта задано значение Android 11 (R API 30) или более поздней, необходимо обновить манифест Android с запросами, используюющими требования к видимости пакета Android.

В файле Platform/Android/AndroidManifest.xml добавьте следующие queries/intent узлы в manifest узел:

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

Использование средства выбора мультимедиа

Интерфейс IMediaPicker содержит следующие методы, которые возвращают все FileResultметоды, которые можно использовать для получения расположения файла или его чтения.

  • PickPhotoAsync
    открывает браузер мультимедиа для выбора фотографии.

  • CapturePhotoAsync
    открывает камеру, чтобы сделать снимок.

  • PickVideoAsync
    открывает браузер мультимедиа для выбора видео.

  • CaptureVideoAsync
    открывает камеру, чтобы снять видео.

Каждый метод при необходимости принимает MediaPickerOptions тип параметра, позволяющий Title задаваться в некоторых операционных системах, которые отображаются пользователю.

Важно!

Все методы должны вызываться в потоке пользовательского интерфейса, так как разрешения проверка и запросы автоматически обрабатываются .NET MAUI.

Сделать фотографию

CapturePhotoAsync Вызовите метод, чтобы открыть камеру и позволить пользователю сфотографироваться. Если пользователь принимает фотографию, возвращаемое значение метода будет ненулевое значение. В следующем примере кода средство выбора мультимедиа используется для создания фотографии и сохранения его в каталоге кэша:

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

Совет

Свойство FullPath не всегда возвращает физический путь к файлу. Чтобы получить файл, используйте метод OpenReadAsync.