Xamarin.Essentials: Selector de archivos multimedia
La clase MediaPicker permite al usuario escoger o tomar una foto o vídeo en el dispositivo.
Introducción
Para empezar a usar esta API, lea la guía de introducción para asegurarse de que la biblioteca está correctamente instalada y configurada en los proyectos.
Para acceder a la función de MediaPicker, se requiere la siguiente configuración específica para la plataforma.
Los permisos siguientes son requeridos y se deben configurar en el proyecto de Android. Se puede agregar de las siguientes maneras:
Abra el archivo AssemblyInfo.cs de la carpeta Propiedades y agregue lo siguiente:
// 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)]
O BIEN, actualice el manifiesto de Android:
Abra el archivo AndroidManifest.xml de la carpeta Propiedades y agregue lo siguiente dentro del nodo 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" />
O haga clic con el botón derecho en el proyecto de Android y abra las propiedades del proyecto. En Manifiesto de Android, busque el área Permisos requeridos: y active estos permisos. Esto actualizará automáticamente el archivo AndroidManifest.xml.
Uso del Selector de archivos multimedia
La clase MediaPicker tiene los métodos siguientes que devuelven un elemento FileResult que se puede usar para obtener la ubicación de los archivos o para leerlo como Stream.
PickPhotoAsync: abre el explorador de elementos multimedia para seleccionar una foto.CapturePhotoAsync: abre la cámara para tomar una foto.PickVideoAsync: abre el explorador de elementos multimedia para seleccionar un vídeo.CaptureVideoAsync: abre la cámara para grabar un vídeo.
Cada método toma opcionalmente un parámetro MediaPickerOptions que permite establecer el elemento Title en algunos sistemas operativos que se muestran a los usuarios.
Sugerencia
Se debe llamar a todos los métodos del subproceso de interfaz de usuario porque Xamarin.Essentialscontrola automáticamente las solicitudes y comprobaciones de permisos.
Uso general
async Task TakePhotoAsync()
{
try
{
var photo = await MediaPicker.CapturePhotoAsync();
await LoadPhotoAsync(photo);
Console.WriteLine($"CapturePhotoAsync COMPLETED: {PhotoPath}");
}
catch (FeatureNotSupportedException fnsEx)
{
// Feature is not supported on the device
}
catch (PermissionException pEx)
{
// Permissions not granted
}
catch (Exception ex)
{
Console.WriteLine($"CapturePhotoAsync THREW: {ex.Message}");
}
}
async Task LoadPhotoAsync(FileResult photo)
{
// canceled
if (photo == null)
{
PhotoPath = null;
return;
}
// save the file into local storage
var newFile = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
using (var stream = await photo.OpenReadAsync())
using (var newStream = File.OpenWrite(newFile))
await stream.CopyToAsync(newStream);
PhotoPath = newFile;
}
Sugerencia
La propiedad FullPath no siempre devuelve la ruta de acceso física al archivo. Para obtener el archivo, use el método OpenReadAsync.