Поделиться через


Выбор и сохранение звуковых сигналов с помощью схемы 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
}

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

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

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

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

Возвращаемые значения Тип Возможные значения Description
Результат Int32 0-success.
1-отменено.
7-недопустимые параметры.
8 — нет тонов, соответствующих критериям фильтра.
255 — указанное действие не реализовано.
Результат операции выбора.
ToneToken строка Маркер выбранного тона.
Строка пуста, если пользователь выбирает значение по умолчанию в средство выбора.
Этот маркер можно использовать в полезных данных всплывающего уведомления или может быть назначен в качестве мелодии звонка контакта или текстового тона. Параметр возвращается в ValueSet, только если результат равен 0.
DisplayName строка Понятное имя указанного тона. Строка, которую можно показать пользователю, чтобы представить выбранный тон. Параметр возвращается в 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
     }
}

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

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

Параметр Type Обязательное поле Возможные значения Description
Действие строка yes "SaveRingtone" Открывает средство выбора, чтобы сохранить кольцо.
ToneFileSharingToken строка yes Маркер общего доступа к файлам SharedStorageAccessManager для сохранения файла ringtone. Сохраняет определенный звуковой файл в виде мелодии звонка. Поддерживаемые типы контента для файла — mpeg audio и x-ms-wma.
DisplayName строка no Понятное имя указанного тона. Задает отображаемое имя, используемое при сохранении указанного мелодии звонка.

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

Возвращаемые значения Тип Возможные значения Description
Результат Int32 0-success.
1-отменено пользователем.
2-Недопустимый файл.
3-Недопустимый тип содержимого файла.
4-файл превышает максимальный размер звонка (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;
          }
      }
 }

Задача. Преобразование маркера тона в понятное имя

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

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

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

Возвращаемое значение Тип Возможные значения Description
Результат Int32 0-Операция выбора завершилась успешно.
7-Неправильный параметр (например, не указан ТонТокен).
9-Error считывает имя указанного токена.
10.Не удается найти указанный маркер тона.
Результат операции выбора.
DisplayName строка Понятное имя тона. Возвращает отображаемое имя выбранного тона. Этот параметр возвращается только в 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
        }
    }
}