Разработка под Android в .NET MAUI. Работа с фото и видеофайлами

Работа с фото и видеофайлами в .NET MAUI осуществляется с использованием одной из реализаций интерфейса IMediaPicker. Этот интерфейс в чем-то схож с ранее рассмотренным нами IFilePicker, однако IMediaPicker позволяет нам не только выбирать готовые файлы на устройстве, но и запускать камеру для фото- и видеосъемки.

Работа с фото и видеофайлами в .NET MAUI

Определение необходимых разрешений

Необходимые для работы с фото и видеофайлами разрешения такие же, как и при выборе файлов. Внесем необходимые изменения в файл Platforms/Android/MainProgram.cs:

using Android.App;
using Android.Runtime;

using MauiMedia;

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

namespace MauiFiles
{
    [Application]
    public class MainApplication : MauiApplication
    {
        public MainApplication(IntPtr handle, JniHandleOwnership ownership)
            : base(handle, ownership)
        {
        }

        protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
    }
}

Для того, чтобы мы получили доступ к камере, нам необходимо определить следующие разрешения и функции приложения:

[assembly: UsesPermission(Android.Manifest.Permission.Camera)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage, MaxSdkVersion = 32)]

[assembly: UsesFeature("android.hardware.camera", Required = true)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]

Таким образом, весь исходный код файла Platforms/Android/MainProgram.cs у вас должен получиться вот таким:

using Android.App;
using Android.Runtime;

using MauiMedia;

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

[assembly: UsesPermission(Android.Manifest.Permission.Camera)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage, MaxSdkVersion = 32)]

[assembly: UsesFeature("android.hardware.camera", Required = true)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]


namespace MauiFiles
{
    [Application]
    public class MainApplication : MauiApplication
    {
        public MainApplication(IntPtr handle, JniHandleOwnership ownership)
            : base(handle, ownership)
        {
        }

        protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
    }
}

Интерфейс IMediaPicker и класс MediaPicker

Реализация интерфейса IMediaPicker по умолчанию содержится в свойстве Default статического класса MediaPicker. Интерфейс IMediaPicker предоставляет нам следующие методы для работы с фото и видеофайлами в .NET MAUI:

Метод Описание
public Task<FileResult?> PickPhotoAsync(MediaPickerOptions? options = default);
Открывает стандартное средство выбора мультимедиа на устройстве для выбора фотографии
public Task<FileResult?> PickVideoAsync(MediaPickerOptions? options = default);
Открывает стандартное средство выбора мультимедиа на устройстве для выбора видеофайла
public Task<FileResult?> CapturePhotoAsync(MediaPickerOptions? options = default);
Открывает камеру устройства, чтобы сделать фотографию
public Task<FileResult?> CaptureVideoAsync(MediaPickerOptions? options = default);
Открывает камеру устройства, чтобы снять видео

Также нам доступно свойство

public bool IsCaptureSupported { get; }

которое указывает доступна ли съема фото и видео на устройстве. Класс MediaPickerOptions, объекты которого используются в методах IMediaPicker, предоставляет нам всего одно свойство Title — заголовок, который отображается при выборе носителя, однако показ этого заголовка не гарантируется на всех платформах, поэтому можно просто использовать в качестве параметра методов значение по умолчанию.

Как можно видеть по описанию методов, все они возвращают нам объект уже известного нам типа FileResult, поэтому мы можем уже сейчас рассмотреть работу методов IMediaPicker в нашем приложении.

Выбор фото и видеофайлов в .NET MAUI

Перепишем обработчик события Clicked кнопки на странице MainPage следующим образом:

namespace MauiMedia
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void OnCounterClicked(object sender, EventArgs e)
        {
            var result = await MediaPicker.Default.PickPhotoAsync();
            if (result != null)
            {
                if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
                    result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
                {
                    var Image = ImageSource.FromFile(result.FullPath);
                    ImageData.Source = Image;
                }
            }
        }
    }

}

По сути, мы здесь повторяем тот же код, что и при обычном выборе файлов, который мы рассматривали в предыдущей части, но используем метод PickPhotoAsync() объекта, реализующего IMediaPicker. Код XAML страницы будет следующим:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiMedia.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            <Image x:Name="ImageData"/>

            <Button
                x:Name="CounterBtn"
                Text="Click me" Clicked="OnCounterClicked"/>
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

Запустим приложение и проверим результат. После нажатия кнопки появится браузер выбора фотографий:

Работа с фото и видеофайлами в .NET MAUI

После выбора фотографии, она появится в элементе Image приложения:

Работа с фото и видеофайлами в .NET MAUIАналогичным образом можно выбирать и видеофайлы.

Как открыть камеру и сделать фотографию в .NET MAUI

Теперь перепишем наше приложение таким образом, чтобы мы могли запустить камеру, сделать фотографию и отобразить её в приложении. Перепишем обработчик события Clicked следующим образом:

private async void OnCounterClicked(object sender, EventArgs e)
{
    var result = await MediaPicker.Default.CapturePhotoAsync(); //открываем камеру
    if (result != null)
    {
            var Image = ImageSource.FromFile(result.FullPath);
            ImageData.Source = Image;
    }
}

Теперь, если нажать кнопку, то вначале приложение запросит разрешение на доступ камере, после чего откроет её для съемки фотографии. После того, как фотография будет сделана, она появится в нашем приложении:

Работа с фото и видеофайлами в .NET MAUI

Итого

Для работы с камерой устройства в .NET MAUI используется интерфейс IMediaPicker, реализация по умолчанию которого содержится в свойстве Default статического класса MediaPicker. С помощью методов IMediaPicker мы можем как выбирать фотографии на устройстве, так и открывать камеру, чтобы сделать фото или видеосъемку.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии