Xamarin.Essentials: Selezione supporti
La classe MediaPicker consente a un utente di selezionare o scattare una foto o un video nel dispositivo.
Operazioni preliminari
Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.
Per accedere alla funzionalità MediaPicker è necessaria la configurazione specifica della piattaforma seguente.
Le autorizzazioni seguenti sono necessarie e devono essere configurate nel progetto Android. È possibile aggiungerla nei modi seguenti:
Aprire il file AssemblyInfo.cs nella cartella Proprietà e aggiungere:
// 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)]
OPPURE aggiornare il manifesto di Android:
Aprire il file AndroidManifest.xml nella cartella Proprietà e aggiungere quanto segue all'interno 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" />
Oppure fare clic con il pulsante destro del mouse sul progetto Android e aprire le proprietà del progetto. In Manifesto Android trovare l'area Autorizzazioni necessarie: e controllare queste autorizzazioni. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Se la versione di Android di destinazione del progetto è impostata su Android 11 (API R 30) è necessario aggiornare il manifesto Android con query usate con i nuovi requisiti di visibilità del pacchetto.
Aprire il file AndroidManifest.xml nella cartella Proprietà e aggiungere quanto segue all'interno del nodo manifest:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Uso di Selezione supporti
La MediaPicker
classe dispone dei metodi seguenti che tutti restituiscono un FileResult
oggetto che può essere usato per ottenere il percorso dei file o leggerlo come .Stream
PickPhotoAsync
: apre il browser multimediale per selezionare una foto.CapturePhotoAsync
: apre la fotocamera per scattare una foto.PickVideoAsync
: apre il browser multimediale per selezionare un video.CaptureVideoAsync
: apre la fotocamera per scattare un video.
Ogni metodo accetta facoltativamente un MediaPickerOptions
parametro che consente di impostare su Title
alcuni sistemi operativi visualizzati dagli utenti.
Suggerimento
Tutti i metodi devono essere chiamati nel thread dell'interfaccia utente perché i controlli delle autorizzazioni e le richieste vengono gestiti automaticamente da Xamarin.Essentials.
Utilizzo generale
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;
}
Suggerimento
La FullPath
proprietà non restituisce sempre il percorso fisico del file. Per ottenere il file, usare il OpenReadAsync
metodo .