Sélecteur de médias pour les photos et vidéos
Dans cet article, vous allez apprendre à utiliser l’interface IMediaPicker de l’application multiplateforme .NET (.NET MAUI). Cette interface permet aux utilisateurs de choisir ou de prendre une photo ou une vidéo sur l’appareil.
L’implémentation par défaut de l’interface IMediaPicker
est disponible via la propriété MediaPicker.Default. L’espace de noms Microsoft.Maui.Media
contient à la fois l’interface IMediaPicker
et la classe MediaPicker
.
Démarrage
Pour accéder à la fonctionnalité de sélecteur de médias, la configuration suivante spécifique à la plateforme est requise.
L’autorisation CAMERA
est obligatoire, et doit être configurée dans le projet Android. De plus :
Si votre application cible Android 12 ou une verison antérieure, vous devez demander les autorisations
READ_EXTERNAL_STORAGE
etWRITE_EXTERNAL_STORAGE
.Si votre application cible Android 13 ou une version ultérieure et qu’elle a besoin d’accéder aux fichiers multimédias que d’autres applications ont créés, vous devez demander une ou plusieurs des autorisations de média granulaires suivantes au lieu de l’autorisation
READ_EXTERNAL_STORAGE
:READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Ces autorisations peuvent être ajoutées de plusieurs façons, comme indiqué ci-dessous :
Ajoutez les autorisations basées sur l’assembly :
Ouvrez le fichier Platforms/Android/MainApplication.cs et ajoutez les attributs d’assembly suivants après les directives
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)]
- ou -
Mettez à jour le manifeste Android :
Ouvrez le fichier Plateformes/Android/AndroidManifest.xml et ajoutez le code suivant dans le nœud
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" />
- ou -
Mettez à jour le manifeste Android dans l’éditeur de manifeste :
Dans Visual Studio, double-cliquez sur le fichier Plateformes/Android/AndroidManifest.xml pour ouvrir l’éditeur de manifeste Android. Ensuite, dans Autorisations requises, activez les autorisations répertoriées ci-dessus. Cela met automatiquement à jour le fichier AndroidManifest.xml.
Si la version Android cible de votre projet est définie sur Android 11 (R API 30) ou une version ultérieure, vous devez mettre à jour votre Manifeste Android avec les requêtes utilisées par les exigences de visibilité de package d’Android.
Dans le fichier Plateformes/Android/AndroidManifest.xml, ajoutez les nœuds queries/intent
suivants dans le nœud manifest
:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Utilisation du sélecteur de médias
L’interface IMediaPicker a les méthodes suivantes qui retournent toutes FileResult, qui peut être utilisé pour obtenir l’emplacement du fichier ou le lire.
PickPhotoAsync
Ouvre le navigateur multimédia pour sélectionner une photo.CapturePhotoAsync
Ouvre l’appareil photo pour prendre une photo.PickVideoAsync
Ouvre le navigateur multimédia pour sélectionner une vidéo.CaptureVideoAsync
Ouvre l’appareil photo pour prendre une vidéo.
Chaque méthode prend éventuellement un type de paramètre MediaPickerOptions qui permet la définition de Title sur certains systèmes d’exploitation, qui s’affiche aux utilisateurs.
Important
Toutes les méthodes doivent être appelées sur le thread d’interface utilisateur, car les vérifications d’autorisation et les demandes sont gérées automatiquement par .NET MAUI.
Prendre une photo
Appelez la méthode CapturePhotoAsync pour ouvrir l’appareil photo et laissez les utilisateurs prendre une photo. Si les utilisateurs prennent une photo, la valeur renvoyée de la méthode est une valeur non nulle. L’exemple de code suivant utilise le sélecteur de médias pour prendre une photo et l’enregistrer dans le répertoire du 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);
}
}
}
Conseil
La propriété FullPath ne retourne pas toujours le chemin d’accès physique au fichier. Utilisez la méthode OpenReadAsync pour obtenir le fichier.