Выбор и сохранение тонов с помощью схемы URI ms-tonepicker

В этом разделе описывается, как использовать схему URI ms-tonepicker:. Эту схему URI можно использовать для:

  • Определите, доступен ли на устройстве селектор тонов.
  • Отображение средства выбора тонов для списка доступных мелодий, системных звуков, текстовых тонов и звуков сигнализации; и получите маркер тона, представляющий выбранный пользователем звук.
  • Отображение средства сохранения тонов, который принимает звуковой маркер файла в качестве входных данных и сохраняет его на устройстве. Сохраненные тоны затем доступны через средство выбора тонов. Пользователи также могут дать тону удобное имя.
  • Преобразуйте токен тона в удобочитаемое имя.

ms-tonepicker: справочник по протоколу URI

Эта схема URI не передает аргументы через строку схемы URI, но вместо этого передает аргументы через ValueSet. Все строки чувствительны к регистру.

В разделах ниже указано, какие аргументы должны передаваться для выполнения указанной задачи.

Задача. Определение доступности средства выбора тонов на устройстве

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

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

Задача. Отображение средства выбора тонов

Аргументы, которые можно передать для отображения селектора тонов, следующие:

Параметр Тип Обязательно Возможные значения Описание
Действие струна да "PickRingtone" Открывает средство выбора тонов.
CurrentToneFilePath струна нет Существующий маркер тона. Тон, который будет отображаться как текущий в выборе тонов. Если это значение не задано, по умолчанию выбран первый тон в списке.
Это не, строго говоря, путь к файлу. Вы можете получить подходящее значение CurrenttoneFilePath из значения ToneToken, возвращаемого из тонального пикера.
ФильтрТипа струна нет "Рингтоны", "Уведомления", "Будильники", "Нет" Выбирает, какие тоны нужно добавить в селектор. Если фильтр не указан, отображаются все тоны.

Значения, возвращаемые в LaunchUriResults.Result:

Возвращаемые значения Тип Возможные значения Описание
Результат Int32 0-успех.
1-отменено.
7-недопустимые параметры.
8 — нет тонов, соответствующих критериям фильтра.
255 — указанное действие не реализовано.
Результат операции выбора.
ToneToken струна Маркер выбранного тона.
Строка пуста, если пользователь выбирает в элементе выбора значение по умолчанию .
Этот токен можно использовать в нагрузке уведомления toast или назначить в качестве рингтона или текстового сигнала контакта. Параметр возвращается в ValueSet, только если результат равен 0.
Отображаемое имя струна Удобочитаемое имя указанного тона. Строка, которую можно показать пользователю, чтобы представить выбранный тон. Параметр возвращается в ValueSet, только если результат равен 0.

Пример. Откройте средство выбора тонов, чтобы пользователь смог выбрать тон

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

Задача. Отображение средства сохранения тонов

Аргументы, которые можно передать для отображения средства сохранения тонов, приведены следующим образом:

Параметр Тип Обязательно Возможные значения Описание
Действие струна да "SaveRingtone" Открывает окно для сохранения мелодии звонка.
ТонФайлШэрингТокен струна да SharedStorageAccessManager токен доступа для совместного использования, чтобы сохранить файл рингтона. Сохраняет определенный звуковой файл в виде мелодии звонка. Поддерживаемые типы контента для файла — mpeg audio и x-ms-wma.
Отображаемое имя струна нет Удобочитаемое имя указанного тона. Задает отображаемое имя, используемое при сохранении указанной мелодии звонка.

Значения, возвращаемые в LaunchUriResults.Result:

Возвращаемые значения Тип Возможные значения Описание
Результат Int32 0-успех.
1-отменено пользователем.
2-Недопустимый файл.
3-Недопустимый тип содержимого файла.
Четвертый файл превышает максимальный размер рингтона (1 МБ в Windows 10).
Файл 5 превышает 40-секундный лимит.
6-файл защищен цифровыми правами.
7-недопустимые параметры.
Результат операции выбора.

Пример: Сохранение локального музыкального файла в качестве рингтона

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

Задача: Преобразование маркера тона в дружественное имя

Аргументы, которые вы можете передать для получения дружественного имени тона, следующие:

Параметр Тип Обязательно Возможные значения Описание
Действие струна да ПолучитьНазваниеТона Указывает, что вы хотите получить дружественное имя тона.
ToneToken струна да Маркер тона Маркер тона, из которого требуется получить отображаемое имя.

Значения, возвращаемые в LaunchUriResults.Result:

Возвращаемое значение Тип Возможные значения Описание
Результат Int32 0-Операция выбора завершилась успешно.
7-Неправильный параметр (например, не указан ТонТокен).
9-Error считывает имя указанного токена.
10.Не удается найти указанный маркер тона.
Результат операции выбора.
Отображаемое имя струна Дружественное имя тона. Возвращает отображаемое имя выбранного тона. Этот параметр возвращается в ValueSet только если результат равен 0.

Пример: получение токена сигнала вызова из Contact.RingToneToken и отображение дружественного имени в карточке контакта.

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