Средство выбора мультимедиа для фотографий и видео
В этой статье описывается, как использовать интерфейс многоплатформенного приложения .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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по