Télécharger un fichier audio en .NET MAUI
C’est déjà l’épisode n°13 de cette série, alors j’espère que c’est toujours relativement simple à suivre ! Mais il se peut que tu aies des questions ou des remarques. Si c’est le cas, pose-les moi en commentaires en bas de l’article ou écris-moi directement par e-mail (jeanemmanuel.baillat@gmail.com) !
Aujourd’hui, nous allons voir comment permettre à l’utilisateur de télécharger la musique qui est en cours de lecture. Depuis le temps qu’on écoute la même chanson en boucle, je suis sûr que tu rêvais de pouvoir la télécharger depuis l’application ! 😄
Création d’un nouveau ViewModel
Avant tout, nous devons mettre en place un nouveau ViewModel pour la vue MusicPlayerView. Pour cela, ajoute une nouvelle classe nommée MusicPlayerViewModel dans le dossier ViewModels, et définis-la avec le code suivant :
Nom du fichier :MusicPlayerViewModel.cs
|
|
MusicPlayerView.cs
et modifie-le comme suit :Nom du fichier :MusicPlayerView.cs
|
|
Comme pour le HomeViewModel que l’on avait associé avec la HomeView, on a modifié ici le BindingContext
de la MusicPlayerView pour lui associer le nouveau MusicPlayerViewModel.
Bon, c’était rapide ! Voyons maintenant comment structurer les données de l’application en définissant le Model des pistes musicales.
Une classe pour les pistes musicales
Chaque piste musicale lue dans l’application se définit par un panel d’informations que l’on va regrouper dans une classe nommée MusicTrack
. Et comme tu l’auras compris, ce nouvel objet fait parti du Model de notre application.
Commence donc par créer un nouveau dossier intitulé Models, puis ajoutes-y une nouvelle classe définie par le code suivant :
Nom du fichier :MusicTrack.cs
|
|
Pour les besoins de ce cours, 4 propriétés de type string sont nécessaires pour contenir les informations suivantes :
Le lien d’écoute du morceau (
AudioURL
),Le lien de téléchargement du morceau (
AudioDownloadURL
),Le nom du morceau (
Title
),Et le nom de l’auteur du morceau (
Author
).
Comme il est désormais possible de manipuler des pistes musicales, on va ajouter une propriété de type MusicTrack
au MusicPlayerViewModel pour définir la chanson en cours de lecture :
Nom du fichier :MusicPlayerViewModel.cs
|
|
Une propriété qui s’adapte parfaitement au découpage Model-View-ViewModel (MVVM) puisqu’on l’a déclarée comme étant une [ObservableProperty]
, une annotation fournie par la librairie MVVM Toolkit.
Cette annotation va alors générer tout le code nécessaire pour déclencher des évènements (généralement vers la View) en cas de changement de valeur. En effet, on souhaite calquer les informations affichées dans la View sur le ViewModel qui lui est associé.
Nom du fichier :MusicPlayerViewModel.cs
|
|
MusicPlayer
.Pour cela, il va falloir modifier la méthode InitMusicPlayer()
dans le MusicPlayerView, et appliquer le Data Binding à la propriété Source
du MediaElement :
Nom du fichier :MusicPlayerView.cs
|
|
Souviens-toi, la propriété Source
du MediaElement permet de définir la source du média qu’il doit jouer. Et désormais, la propriété MusicPlayer.Source
est rattachée dynamiquement à la propriété CurrentTrack
définie dans le MusicPlayerViewModel.
Bien-sûr, on n’oublie pas dans le convert de transformer le lien streaming audio (musicTrack.AudioURL
) avec la méthode MediaSource.FromUri(), pour se conformer au type de la propriété Source
du MediaElement.
Et voilà ! Relance donc le projet et vérifie que tout fonctionne comme avant. Je ne voudrais pas te perdre en route ! 😛
Tout est bien en place ? Alors passons vite à la partie la plus intéressante de ce chapitre : le téléchargement !
Télécharger un morceau
Continuons maintenant notre petit bout de chemin en implémentant le bouton de téléchargement.
Pour cela, on va déjà associer une action déclenchée au clic sur le DownloadButton
…
Nom du fichier :MusicPlayerView.cs
|
|
… et dont le comportement sera défini dans MusicPlayerViewModel :
Nom du fichier :MusicPlayerViewModel.cs
|
|
Tu te rappelles de l’annotation [RelayCommand]
? On y avait déjà eu recours dans le chapitre sur le MVVM. C’est elle qui permet à notre méthode DownloadCurrentTrack() d’être appelée depuis la View !
Et je t’arrête tout de suite, la méthode Toast() n’a rien à voir avec ton petit-déjeuner ce matin 😄
Cette méthode fournie par la librairie .NET MAUI Community Toolkit permet d’afficher temporairement un message à l’écran, à la manière d’une notification directement intégrée dans l’application.
À ce stade, on peut déjà tester que notre bouton fonctionne bien :
Juste avant, j’aurais aimé attirer ton attention sur le paramètre requis par notre nouvelle commande, le cancellationToken
. Il s’agit d’un objet de type CancellationToken qui permet de garder un lien avec le code initiateur de l’appel à la méthode DownloadCurrentTrack() en cas de demande d’annulation de son exécution.
C’est très utile pour les opérations un peu longues, par exemple si notre utilisateur décidait d’annuler le téléchargement par manque de réseau. On ne va pas implémenter cette fonctionnalité aujourd’hui, mais ça serait une très bonne amélioration !
Nom du fichier :MusicPlayerViewModel.cs
|
|
C’est un gros bout de code, mais rien d’insurmontable !
Décortiquons cela ensemble pas à pas :
On définit d’abord un client HTTP pour nous permettre d’effectuer une requête vers le lien de téléchargement du morceau en cours de lecture (
CurrentTrack.AudioDownloadURL
),Nous espérons alors en retour une réponse positive du serveur pour nous fournir les données correspondantes,
Et puis si tout va bien, on ouvre un canal de lecture pour transférer ces données dans un fichier et demander sa sauvegarde sur l’appareil.
Comme tu vois, il n’y a vraiment aucune logique complexe ici. C’est seulement un peu technique ! Alors comme à chaque fois, prends le temps pour approfondir le sujet si besoin.
Pour cela, rends-toi dans le dossier Platforms, puis Android, et ouvre le fichier AndroidManifest.xml pour y rajouter les lignes suivantes :
Nom du fichier :AndroidManifest.xml
|
|
Enfin, on a codé quelques messages pour aider l’utilisateur à comprendre ce qu’il se passe en arrière-plan. En effet, on ne voudrait pas qu’une erreur survienne pendant le téléchargement et que l’utilisateur attende indéfiniment ! Et comme il ne s’agit que de messages informels, sans aucune action requise, j’ai préféré utiliser le fameux Toast pour afficher des notifications éphémères.
Et voilà, c’est terminé. Fais vite un essai !
Je te félicite pour tout ce travail ! Encore un dernier effort et la manipulation des médias n’aura plus aucun secret pour toi. Rendez-vous au prochain chapitre pour gérer la playlist musicale !
Plus d’articles dans la même série: