Selezione multimediale per foto e video
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). IMediaPicker Questa interfaccia consente a un utente di scegliere o scattare una foto o un video nel dispositivo.
L'implementazione predefinita dell'interfaccia IMediaPicker
è disponibile tramite la MediaPicker.Default proprietà . Sia l'interfaccia che MediaPicker
la IMediaPicker
classe sono contenute nello spazio dei Microsoft.Maui.Media
nomi .
Operazioni preliminari
Per accedere alla funzionalità di selezione multimediale, è necessaria la configurazione specifica della piattaforma seguente.
L'autorizzazione CAMERA
è obbligatoria e deve essere configurata nel progetto Android. In aggiunta:
Se l'app è destinata ad Android 12 o versione precedente, è necessario richiedere le
READ_EXTERNAL_STORAGE
autorizzazioni eWRITE_EXTERNAL_STORAGE
.Se l'app è destinata ad Android 13 o versione successiva e deve accedere ai file multimediali creati da altre app, è necessario richiedere una o più delle autorizzazioni granulari seguenti per i supporti anziché l'autorizzazione
READ_EXTERNAL_STORAGE
:READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Queste autorizzazioni possono essere aggiunte nei modi seguenti:
Aggiungere le autorizzazioni basate su assembly:
Aprire il file Platforms/Android/MainApplication.cs e aggiungere gli attributi assembly seguenti dopo
using
le direttive:// 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)]
o
Aggiornare il manifesto Android:
Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere quanto segue nel
manifest
nodo:<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" />
o
Aggiornare il manifesto Android nell'editor del manifesto:
In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare le autorizzazioni elencate in precedenza. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Se la versione di Android di destinazione del progetto è impostata su Android 11 (API R 30) o versione successiva, è necessario aggiornare il manifesto Android con query che usano i requisiti di visibilità dei pacchetti android.
Nel file Platforms/Android/AndroidManifest.xml aggiungere i nodi seguenti queries/intent
nel manifest
nodo:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Uso della selezione multimediale
L'interfaccia IMediaPicker include i metodi seguenti che restituiscono tutti un FileResultoggetto , che può essere usato per ottenere il percorso del file o leggerlo.
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 tipo di parametro che consente di impostare su Title alcuni sistemi operativi, che viene visualizzato all'utente.
Importante
Tutti i metodi devono essere chiamati nel thread dell'interfaccia utente perché i controlli delle autorizzazioni e le richieste vengono gestiti automaticamente da .NET MAUI.
Scattare una foto
Chiamare il CapturePhotoAsync metodo per aprire la fotocamera e consentire all'utente di scattare una foto. Se l'utente acquisisce una foto, il valore restituito del metodo sarà un valore non Null. L'esempio di codice seguente usa la selezione multimediale per scattare una foto e salvarla nella directory della cache:
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);
}
}
}
Suggerimento
La FullPath proprietà non restituisce sempre il percorso fisico del file. Per ottenere il file, usare il OpenReadAsync metodo .