Partager via


Sélecteur de médias pour les photos et vidéos

Parcourez l’exemple. Parcourir l'exemple

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 et WRITE_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.

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.