ms-tonepicker URI 체계를 사용하여 톤 선택 및 저장

이 토픽에서는 ms-tonepicker: URI 체계를 사용하는 방법을 설명합니다. 이 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 Required 사용 가능한 값: 설명
작업 string "PickRingtone" 톤 선택기를 엽니다.
CurrentToneFilePath string 아니요 기존 톤 토큰입니다. 톤 선택기에서 현재의 톤으로 표시할 톤입니다. 이 값을 설정하지 않으면 목록의 첫 번째 톤이 기본적으로 선택됩니다.
이 값은 엄밀히 말해 파일 경로가 아닙니다. 톤 선택기에서 반환된 ToneToken 값으로부터 CurrenttoneFilePath에 적합한 값을 가져올 수 있습니다.
TypeFilter string 아니요 "벨소리", "알림", "알람", "없음" 선택기에 추가할 톤을 선택합니다. 필터를 지정하지 않으면 모든 톤이 표시됩니다.

다음은 LaunchUriResults.Result에서 반환되는 값입니다.

반환 값 Type 사용 가능한 값: 설명
결과 Int32 0 - 성공입니다.
1 - 취소되었습니다.
7 - 유효하지 않은 매개변수입니다.
8 - 필터 조건과 일치하는 톤이 없습니다.
255 - 지정된 작업이 구현되지 않습니다.
선택기 작업의 결과입니다.
ToneToken string 선택한 톤의 토큰입니다.
사용자가 선택기에서 기본값을 선택하면 문자열이 비어 있습니다.
이 토큰은 알림 메시지 페이로드에서 사용하거나 연락처의 벨소리 또는 텍스트 톤으로 할당할 수 있습니다. 이 매개변수는 결과가 0인 경우에만 ValueSet에 반환됩니다.
DisplayName string 지정된 톤의 친숙한 이름입니다. 선택한 톤을 나타내도록 사용자에게 표시할 수 있는 문자열입니다. 이 매개변수는 결과가 0인 경우에만 ValueSet에 반환됩니다.

예: 사용자가 톤을 선택할 수 있도록 톤 선택기 열기

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 Required 사용 가능한 값: 설명
작업 string "SaveRingtone" 선택기를 열어서 벨소리를 저장합니다.
ToneFileSharingToken string 저장할 벨소리 파일에 대한 SharedStorageAccessManager 파일 공유 토큰입니다. 특정 사운드 파일을 벨소리로 저장합니다. 이 파일에 대해 지원되는 콘텐츠 형식은 mpeg 오디오 및 x-ms-wma 오디오입니다.
DisplayName string 아니요 지정된 톤의 친숙한 이름입니다. 지정된 벨소리를 저장할 때 사용할 표시 이름을 설정합니다.

다음은 LaunchUriResults.Result에서 반환되는 값입니다.

반환 값 Type 사용 가능한 값: 설명
결과 Int32 0 - 성공입니다.
1 - 사용자가 취소했습니다.
2 - 유효하지 않은 파일입니다.
3 - 유효하지 않은 파일 콘텐츠 형식입니다.
4 - 파일이 최대 벨소리 크기(Windows 10의 경우 1MB)를 초과합니다.
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 Required 사용 가능한 값: 설명
작업 string "GetToneName" 친숙한 톤 이름을 가져와야 한다는 것을 나타냅니다.
ToneToken string 톤 토큰 표시 이름을 가져올 출처가 되는 톤 토큰입니다.

다음은 LaunchUriResults.Result에서 반환되는 값입니다.

반환 값 Type 사용 가능한 값: 설명
결과 Int32 0 - 선택기 작업이 성공했습니다.
7 - 잘못된 매개변수(예: ToneToken이 제공되지 않음)입니다.
9 - 지정된 토큰의 이름을 읽는 동안 오류가 발생했습니다.
10 - 지정된 톤 토큰을 찾을 수 없습니다.
선택기 작업의 결과입니다.
DisplayName string 톤의 친숙한 이름입니다. 선택한 톤의 표시 이름을 반환합니다. 이 매개변수는 Result(결과)가 0인 경우에만 ValueSet에 반환됩니다.

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