Sélectionner et enregistrer des tonalités à l’aide du schéma d’URI ms-tonepicker

Cette rubrique décrit comment utiliser le schéma d’URI ms-tonepicker:. Ce schéma d’URI peut être utilisé pour :

  • Vérifier si le sélecteur de tonalités est disponible sur l’appareil.
  • Afficher le sélecteur de tonalités pour répertorier les sonneries d’appel, sons système, sonneries de SMS et sonneries d’alarme disponibles ; et obtenir un jeton de tonalité qui représente la tonalité sélectionnée par l’utilisateur.
  • Afficher l’enregistreur de tonalités, qui utilise un jeton de fichier audio comme entrée et l’enregistre sur l’appareil. Les tonalités enregistrées sont alors accessibles dans le sélecteur de tonalités. Les utilisateurs peuvent également attribuer un nom convivial à la tonalité.
  • Convertir un jeton de tonalité en nom convivial de la tonalité.

Référence de schéma d’URI ms-tonepicker:

Ce schéma d’URI ne transmet pas les arguments via la chaîne de schéma d’URI, mais via une classe ValueSet. Toutes les chaînes sont sensibles à la casse.

Les sections ci-dessous indiquent quels arguments doivent être transmis pour effectuer la tâche spécifiée.

Tâche : vérifier si le sélecteur de tonalités est disponible sur l’appareil

var status = await Launcher.QueryUriSupportAsync(new Uri("ms-tonepicker:"),     
                                     LaunchQuerySupportType.UriForResults,
                                     "Microsoft.Tonepicker_8wekyb3d8bbwe");

if (status != LaunchQuerySupportStatus.Available)
{
    // the tone picker is not available
}

Tâche : afficher le sélecteur de tonalités

Les arguments que vous pouvez transmettre pour afficher le sélecteur de tonalités sont les suivants :

Paramètre Type Obligatoire Valeurs possibles Description
Action string Oui « PickRingtone » Ouvre le sélecteur de tonalités.
CurrentToneFilePath string non Jeton de tonalité existant. Tonalité à afficher en tant que tonalité actuelle dans le sélecteur de tonalités. Si cette valeur n’est pas définie, la première tonalité de la liste est sélectionnée par défaut.
Cela n’est pas réellement un chemin d’accès au fichier. Vous pouvez obtenir une valeur adaptée pour CurrenttoneFilePath à partir de la valeur ToneToken renvoyée par le sélecteur de tonalités.
TypeFilter string non « Sonneries », « Notifications », « Alarmes », « Aucun » Sélectionne les tonalités à ajouter au sélecteur. Si aucun filtre n’est spécifié, toutes les tonalités s’affichent.

Valeurs renvoyées dans LaunchUriResults.Result :

Valeurs retournées Type Valeurs possibles Description
Résultats Int32 0 - succès.
1 - opération annulée.
7 - paramètres non valides.
8 - aucune tonalité correspondant aux critères de filtre.
255 - l’action spécifiée n’est pas implémentée.
Résultat de l’opération de sélection.
ToneToken string Jeton de la tonalité sélectionnée.
La chaîne est vide si l’utilisateur sélectionne par défaut dans le sélecteur.
Ce jeton peut être utilisé dans une charge utile de notification toast, ou attribué en tant que sonnerie d’appel ou de SMS d’un contact. Le paramètre est renvoyé dans le ValueSet uniquement si la valeur Résultat est 0.
DisplayName string Nom convivial de la tonalité spécifiée. Une chaîne, visible par l’utilisateur, qui représente la tonalité sélectionnée. Le paramètre est renvoyé dans le ValueSet uniquement si la valeur Résultat est 0.

Exemple : Ouvrir le sélecteur de tonalités afin que l’utilisateur puisse sélectionner une tonalité

LauncherOptions options = new LauncherOptions();
options.TargetApplicationPackageFamilyName = "Microsoft.Tonepicker_8wekyb3d8bbwe";

ValueSet inputData = new ValueSet() {
    { "Action", "PickRingtone" },
    { "TypeFilter", "Ringtones" } // Show only ringtones
};

LaunchUriResult result = await Launcher.LaunchUriForResultsAsync(new Uri("ms-tonepicker:"), options, inputData);

if (result.Status == LaunchUriStatus.Success)
{
     Int32 resultCode =  (Int32)result.Result["Result"];
     if (resultCode == 0)
     {
         string token = result.Result["ToneToken"] as string;
         string name = result.Result["DisplayName"] as string;
     }
     else
     {
           // handle failure
     }
}

Tâche : afficher l’enregistreur de tonalités

Les arguments que vous pouvez transmettre pour afficher l’enregistreur de tonalités sont les suivants :

Paramètre Type Obligatoire Valeurs possibles Description
Action string Oui « SaveRingtone » Ouvre le sélecteur pour enregistrer une sonnerie.
ToneFileSharingToken string Oui Jeton de partage de fichier SharedStorageAccessManager pour l’enregistrement du fichier de la sonnerie. Enregistre un fichier audio spécifique en tant que sonnerie. Le fichier audio doit être au format mpeg ou x-ms-wma.
DisplayName string non Nom convivial de la tonalité spécifiée. Définit le nom d’affichage à utiliser lors de l’enregistrement de la sonnerie spécifiée.

Valeurs renvoyées dans LaunchUriResults.Result :

Valeurs retournées Type Valeurs possibles Description
Résultats Int32 0 - succès.
1 - opération annulée par l’utilisateur.
2 - fichier non valide.
3 - type de contenu non valide.
4 - le fichier dépasse la taille de sonnerie maximale autorisée (1 Mo dans Windows 10).
5 - le fichier dépasse la longueur maximale autorisée (40 secondes).
6 - le fichier est protégé par la gestion des droits numériques (DRM).
7 - paramètres non valides.
Résultat de l’opération de sélection.

Exemple : Enregistrer un fichier de musique local en tant que sonnerie

LauncherOptions options = new LauncherOptions();
options.TargetApplicationPackageFamilyName = "Microsoft.Tonepicker_8wekyb3d8bbwe";

ValueSet inputData = new ValueSet() {
    { "Action", "SaveRingtone" },
    { "ToneFileSharingToken", SharedStorageAccessManager.AddFile(myLocalFile) }
};

LaunchUriResult result = await Launcher.LaunchUriForResultsAsync(new Uri("ms-tonepicker:"), options, inputData);

if (result.Status == LaunchUriStatus.Success)
{
     Int32 resultCode = (Int32)result.Result["Result"];

     if (resultCode == 0)
     {
         // no issues
     }
     else
     {
          switch (resultCode)
          {
             case 2:
              // The specified file was invalid
              break;
              case 3:
              // The specified file's content type is invalid
              break;
              case 4:
              // The specified file was too big
              break;
              case 5:
              // The specified file was too long
              break;
              case 6:
              // The file was protected by DRM
              break;
              case 7:
              // The specified parameter was incorrect
              break;
          }
      }
 }

Tâche : convertir un jeton de tonalité en nom convivial de la tonalité

Les arguments que vous pouvez transmettre pour obtenir le nom convivial d’une tonalité sont les suivants :

Paramètre Type Obligatoire Valeurs possibles Description
Action string Oui « GetToneName » Indique que vous souhaitez obtenir le nom convivial d’une tonalité.
ToneToken string Oui Jeton de tonalité Jeton de tonalité à partir duquel vous souhaitez obtenir un nom d’affichage.

Valeurs renvoyées dans LaunchUriResults.Result :

Valeur retournée Type Valeurs possibles Description
Résultats Int32 0 - opération de sélection réussie.
7 - paramètre incorrect (par exemple, aucune valeur ToneToken fournie).
9 - erreur lors de la lecture du nom du jeton spécifié.
10 - impossible de trouver le jeton de tonalité spécifié.
Résultat de l’opération de sélection.
DisplayName string Nom convivial de la tonalité. Renvoie le nom d’affichage de la tonalité sélectionnée. Ce paramètre est renvoyé dans le ValueSet uniquement si la valeur Résultat est 0.

Exemple : Récupérer un jeton de tonalité à partir de Contact.RingToneToken et afficher son nom convivial sur la carte de visite.

using (var connection = new AppServiceConnection())
{
    connection.AppServiceName = "ms-tonepicker-nameprovider";
    connection.PackageFamilyName = "Microsoft.Tonepicker_8wekyb3d8bbwe";
    AppServiceConnectionStatus connectionStatus = await connection.OpenAsync();
    if (connectionStatus == AppServiceConnectionStatus.Success)
    {
        var message = new ValueSet() {
            { "Action", "GetToneName" },
            { "ToneToken", token)
        };
        AppServiceResponse response = await connection.SendMessageAsync(message);
        if (response.Status == AppServiceResponseStatus.Success)
        {
            Int32 resultCode = (Int32)response.Message["Result"];
            if (resultCode == 0)
            {
                string name = response.Message["DisplayName"] as string;
            }
            else
            {
                // handle failure
            }
        }
        else
        {
            // handle failure
        }
    }
}