Maui 照片和视频的媒体选取器
[删除(380066935@qq.com或微信通知)]
更好的阅读体验请查看原文:https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/device-media/picker?view=net-maui-7.0&tabs=android
本文介绍如何使用 .NET 多平台应用 UI (.NET MAUI) IMediaPicker 接口。 此界面允许用户在设备上选取或拍摄照片或视频。
接口的默认实现 IMediaPicker
可通过 MediaPicker.Default 属性获得。 IMediaPicker
接口和 MediaPicker
类都包含在 命名空间中Microsoft.Maui.Media
。
入门
若要访问媒体选取器功能,需要以下特定于平台的设置。
、CAMERA
WRITE_EXTERNAL_STORAGE
、 READ_EXTERNAL_STORAGE
权限是必需的,并且必须在 Android 项目中配置。 可通过以下方式添加这些内容:
添加基于程序集的权限:
打开 Platforms/Android/MainApplication.cs 文件,并在指令后面
using
添加以下程序集属性:// Needed for Picking photo/video [assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage)] // Needed for Taking photo/video [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] [assembly: UsesPermission(Android.Manifest.Permission.Camera)] // 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 清单:
打开 “平台/Android/AndroidManifest.xml ”文件,并在节点中添加
manifest
以下内容:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" />
如果项目的目标 Android 版本设置为 Android 11 (R API 30) 或更高版本,则必须使用使用 Android 包可见性要求的查询更新 Android 清单。
在 “平台/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 在某些操作系统上设置 ,这会显示给用户。
重要
必须在 UI 线程上调用所有方法,因为权限检查和请求由 .NET MAUI 自动处理。
拍照
CapturePhotoAsync调用 方法以打开相机并允许用户拍照。 如果用户拍摄照片,方法的返回值将是非 null 值。 以下代码示例使用媒体选取器拍摄照片并将其保存到缓存目录:
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 方法。