Partager via


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

Browse sample. Parcourir l’exemple

Cet article explique comment utiliser l’interface utilisateur de l’application multiplateforme .NET (.NET MAUI). IMediaPicker Cette interface permet à un utilisateur 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 MediaPicker.Default propriété. L’interface et MediaPicker la IMediaPicker classe sont contenues dans l’espace Microsoft.Maui.Media de noms.

Démarrage

Pour accéder à la fonctionnalité du sélecteur de médias, la configuration spécifique à la plateforme suivante 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 inférieur, vous devez demander les autorisations et WRITE_EXTERNAL_STORAGE les READ_EXTERNAL_STORAGE autorisations.

  • Si votre application cible Android 13 ou version ultérieure et 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 la manière suivante :

  • Ajoutez les autorisations basées sur l’assembly :

    Ouvrez le fichier Platforms/Android/MainApplication.cs et ajoutez les attributs d’assembly suivants après using les directives :

    // 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 Platforms/Android/AndroidManifest.xml et ajoutez ce qui suit dans le manifest nœud :

    <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 Platforms/Android/AndroidManifest.xml pour ouvrir l’éditeur de manifeste Android. Ensuite, sous Autorisations requises case activée 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 (API R 30) ou une version ultérieure, vous devez mettre à jour votre manifeste Android avec des requêtes qui utilisent les exigences de visibilité du package Android.

Dans le fichier Platforms/Android/AndroidManifest.xml , ajoutez les nœuds suivants queries/intent dans le manifest nœud :

<queries>
  <intent>
    <action android:name="android.media.action.IMAGE_CAPTURE" />
  </intent>
</queries>

Utilisation du sélecteur de supports

L’interface IMediaPicker a les méthodes suivantes qui retournent tous un FileResult, qui peut être utilisé pour obtenir l’emplacement du fichier ou le lire.

Chaque méthode prend éventuellement un MediaPickerOptions type de paramètre qui permet la Title définition sur certains systèmes d’exploitation, qui s’affiche à l’utilisateur.

Important

Toutes les méthodes doivent être appelées sur le thread d’interface utilisateur, car les case activée d’autorisation et les requêtes sont gérées automatiquement par .NET MAUI.

Prendre une photo

Appelez la CapturePhotoAsync méthode pour ouvrir l’appareil photo et laissez l’utilisateur prendre une photo. Si l’utilisateur prend une photo, la valeur de retour de la méthode est une valeur non null. L’exemple de code suivant utilise le sélecteur de supports 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 FullPath propriété ne retourne pas toujours le chemin d’accès physique au fichier. Pour obtenir le fichier, utilisez la OpenReadAsync méthode.