Содержание
Работа с фото и видеофайлами в .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>
Запустим приложение и проверим результат. После нажатия кнопки появится браузер выбора фотографий:
После выбора фотографии, она появится в элементе Image
приложения:
Аналогичным образом можно выбирать и видеофайлы.
Как открыть камеру и сделать фотографию в .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 используется интерфейс IMediaPicker
, реализация по умолчанию которого содержится в свойстве Default
статического класса MediaPicker
. С помощью методов IMediaPicker
мы можем как выбирать фотографии на устройстве, так и открывать камеру, чтобы сделать фото или видеосъемку.