Compartir a través de


Elegir y guardar tonos mediante el esquema de URI ms-tonepicker

En este tema se describe cómo usar el esquema URI ms-tonepicker:. Este esquema de URI se puede usar para:

  • Determine si el selector de tono está disponible en el dispositivo.
  • Mostrar el selector de tono para enumerar tonos disponibles, sonidos del sistema, tonos de texto y sonidos de alarma; y obtienen un token de tono que representa el sonido seleccionado por el usuario.
  • Muestra el protector de tono, que toma un token de archivo de sonido como entrada y lo guarda en el dispositivo. A continuación, los tonos guardados están disponibles a través del selector de tonos. Los usuarios también pueden asignar un nombre descriptivo al tono.
  • Convierta un token de tono en su nombre amigable.

ms-tonepicker: referencia del esquema de URI

Este esquema de URI no pasa argumentos a través de la cadena de esquema de URI, sino que pasa argumentos a través de un ValueSet. Todas las cadenas son sensibles a mayúsculas y minúsculas.

Las secciones siguientes indican qué argumentos se deben pasar para realizar la tarea especificada.

Tarea: determinar si el selector de tono está disponible en el dispositivo

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

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

Tarea: mostrar el selector de tono

Los argumentos que puede pasar para mostrar el selector de tono son los siguientes:

Parámetro Tipo Obligatorio Valores posibles Descripción
Acción cuerda / cadena "PickRingtone" Abre el selector de tono.
CurrentToneFilePath cuerda / cadena No Un token de tono existente. Tono que se va a mostrar como el tono actual en el selector de tonos. Si no se establece este valor, el primer tono de la lista se selecciona de forma predeterminada.
Esto no es, estrictamente hablando, una ruta de acceso de archivo. Puedes obtener un valor adecuado para CurrenttoneFilePath del valor ToneToken devuelto por el selector de tono.
Filtro de Tipo cuerda / cadena No "Tonos de llamada", "Notificaciones", "Alarmas", "Ninguno" Selecciona los tonos que se van a agregar al selector. Si no se especifica ningún filtro, se muestran todos los tonos.

Los valores que se devuelven en LaunchUriResults.Result:

Valores devueltos Tipo Valores posibles Descripción
Resultado Int32 0-èxito.
1 cancelada.
7 parámetros no válidos.
8 : ningún tono coincide con los criterios de filtro.
255: no se implementa la acción especificada.
Resultado de la operación del selector.
ToneToken cuerda / cadena Token del tono seleccionado.
La cadena está vacía si el usuario selecciona predeterminado en el selector.
Este token se puede usar en el contenido de una notificación, o se puede asignar como tono de llamada o tono de texto de un contacto. El parámetro se devuelve en ValueSet solo si Result es 0.
Nombre para mostrar cuerda / cadena Nombre amigable del tono especificado. Cadena que se puede mostrar al usuario para representar el tono seleccionado. El parámetro se devuelve en ValueSet solo si Result es 0.

Ejemplo: abra el selector de tono para que el usuario pueda seleccionar un tono

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
     }
}

Tarea: mostrar el protector de tono

Los argumentos que puede pasar para mostrar el protector de tono son los siguientes:

Parámetro Tipo Obligatorio Valores posibles Descripción
Acción cuerda / cadena "SaveRingtone" Abre el selector para guardar un tono de llamada.
ToneFileSharingToken cuerda / cadena SharedStorageAccessManager token de uso compartido de archivos para el archivo de tono de llamada que se va a guardar. Guarda un archivo de sonido específico como tono de llamada. Los tipos de contenido admitidos para el archivo son audio mpeg y audio x-ms-wma.
Nombre para mostrar cuerda / cadena No Nombre amigable del tono especificado. Establece el nombre para mostrar que se usará al guardar el tono de llamada especificado.

Los valores que se devuelven en LaunchUriResults.Result:

Valores devueltos Tipo Valores posibles Descripción
Resultado Int32 0-èxito.
1 cancelada por el usuario.
2-Archivo no válido.
3-Tipo de contenido de archivo no válido.
4 archivos superan el tamaño máximo de tono de llamada (1 MB en Windows 10).
5-File supera el límite de 40 segundos de longitud.
6-File está protegido por la administración de derechos digitales.
7 parámetros no válidos.
Resultado de la operación del selector.

ejemplo: Guardar un archivo de música local como tono de llamada

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;
          }
      }
 }

Tarea: Convertir un token de tono en su nombre descriptivo

Los argumentos que puede pasar para obtener el nombre descriptivo de un tono son los siguientes:

Parámetro Tipo Obligatorio Valores posibles Descripción
Acción cuerda / cadena "GetToneName" Indica que desea obtener el nombre descriptivo de un tono.
ToneToken cuerda / cadena Símbolo de tono Token de tono del que se va a obtener un nombre para mostrar.

Los valores que se devuelven en LaunchUriResults.Result:

Valor devuelto Tipo Valores posibles Descripción
Resultado Int32 0-La operación del selector se realizó correctamente.
7-Parámetro incorrecto (por ejemplo, no se proporcionó ToneToken).
9-Error al leer el nombre del token especificado.
10-No se puede encontrar el token de tono especificado.
Resultado de la operación del selector.
Nombre para mostrar cuerda / cadena Nombre descriptivo del tono. Devuelve el nombre mostrado del tono seleccionado. Este parámetro solo se devuelve en ValueSet si Result es 0.

Ejemplo: Recupere un token de tono de Contact.RingToneToken y muestre su nombre descriptivo en la tarjeta de contacto.

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
        }
    }
}