Share via


UX/UI

크기 조정이 가능한 창을 사용하면 사용자가 앱 사용 방법을 보다 강력하게 제어할 수 있습니다. 새 기능을 사용하면 앱의 타일과 관련하여 더 많은 작업을 할 수 있습니다. 또한 검색, 공유 및 참 메뉴 업데이트는 보다 일관된 일반 사용자 환경을 만듭니다.

Windows 8.1의 새로운 기능 및 업데이트된 기능

  • 크기 조정이 가능한 창
  • 타일 업데이트
  • 검색 업데이트
  • 공유 업데이트
  • 모든 화면의 참 메뉴 작업
  • 사람 및 이벤트와 통합
  • 음성 합성
  • 백그라운드 작업 관리에 대한 업데이트
  • 잠금 화면에서 알람 앱 지원
  • 작업 항목 일정에 대한 업데이트

크기 조정이 가능한 창

[지금 응용 프로그램 보기, 여러 화면 보기프로젝션 관리자 샘플을 가져옵니다.]

Windows 8.1에서는 창 크기 및 위치에 대한 여러 가지 변경 내용을 제공합니다. Windows 8.1용 앱을 개발할 때 다음 사항에 유의해야 합니다.

  • Windows 8.1에는 고정 너비 보기 상태가 없습니다. 사용자가 앱 크기를 최소 너비까지 지속적으로 줄일 수 있습니다. 앱의 기본 최소 너비는 500픽셀입니다. 따라서 앱에는 더 이상 사이드 및 채우기 보기 상태가 없습니다. 대신에 최소 크기까지 어떤 크기에서도 작동하고 제대로 표시되는 앱을 개발하세요.

    참고  Windows 8의 사이드 보기 너비는 320픽셀입니다. 기본 최소 너비인 500픽셀이 Windows 8 사이드 보기보다 큽니다.

  • 앱이 더 작은 크기에서도 잘 작동하고 사용자가 앱을 화면에 유지하도록 하려는 경우 최소 너비를 320픽셀로 변경할 수 있습니다.

  • 사용자는 동시에 두 개 이상의 앱을 화면에 표시할 수 있습니다. 따라서 앱이 화면 왼쪽 또는 오른쪽에 가장자리에 인접하지 않고 다른 두 개의 앱 사이에 나타날 수 있습니다.

  • 단일 앱이 동시에 두 개 이상의 창을 열 수 있습니다.

  • 앱이 다른 앱을 실행할 수 있습니다. 이 경우 충분한 공간이 있으면 일반적으로 두 개의 앱이 화면을 균일하게 분할합니다. 그러나 실행된 앱이 원본 앱보다 더 넓거나 더 좁도록 변경하거나 화면에서 원래 앱을 대체하도록 변경할 수 있습니다. 기본 동작을 변경하려면 DesiredRemainingView 속성을 사용합니다.

앱은 Windows 8에서처럼 화면 높이를 채워야 합니다. 앱의 최소 높이는 768픽셀입니다.

앱의 좁은 최소 크기와 기본 최소 크기의 픽셀 요구 사항

크기 변경이 가능한 창에 대한 디자인 지침

Windows 8.1용 앱을 디자인할 경우 다음과 같이 해야 합니다.

  • 앱 레이아웃 및 컨트롤의 배율이 최소 크기까지 감소하는지 확인합니다. 특히 앱 크기가 이러한 컨트롤에 어떤 영향을 미치는지 고려합니다.

  • 큰 화면에서 공간을 효과적으로 사용하고 자동으로 재배치되는 레이아웃을 사용하는 앱을 디자인하세요. 큰 공간을 비워 두지 마세요.

  • 최소 너비를 320픽셀로 변경할 경우 앱 너비가 좁아지면 앱이 이런 방식으로 조정되도록 합니다(320픽셀에서 500픽셀 사이 너비).

너비 320픽셀로 크기가 조정되는 창너비보다 높이가 큰 창에는 추가 레이아웃 샘플을 사용할 수 있습니다. 앱 크기에 관계없이 앱에 참 메뉴를 사용하는 방법에 대한 자세한 내용은 참 메뉴가 모든 화면에서 작동을 참조하세요.

최소 너비 설정

앱의 최소 너비를 기본값 500픽셀에서 변경하려면 앱 매니페스트에서 ApplicationView 요소의 MinWidth 특성을 지정합니다.

<Application>
   <VisualElements>
      <ApplicationView MinWidth=”width320” />
   </VisualElements>
</Application>

앱 매니페스트에 대한 자세한 내용은 앱 패키지 매니페스트를 참조하세요.

ApplicationView 클래스 업데이트

Windows 8.1에서 Windows.UI.ViewManagement 네임스페이스에는 다음과 같은 새로운 열거형이 있습니다.

또한 ApplicationView 클래스에는 다음과 같은 새로운 속성이 있습니다.

ApplicationView에도 다음과 같은 새로운 메서드가 있습니다.

Windows 8.1에서 다음 멤버는 사용되지 않습니다.

타일 업데이트

[지금 앱 타일 및 배지보조 타일 샘플을 가져옵니다.]

Windows 8.1에서는 타일에 대한 다음과 같은 변경 내용과 타일 작업 방법을 제공합니다.

새 타일 크기

Windows 8에는 다음과 같은 두 가지 타일 크기가 있습니다.

  • 정사각형 타일(150×150 픽셀, 1x 크기 조정 플라토).
  • 와이드 타일(310×150, 1x 플라토)

Windows 8.1에는 다음과 같은 두 가지 추가 타일 크기가 있습니다.

  • 작은 타일 (70×70, 1x 플라토)
  • 큰 타일(310×310, 1x 플라토)

네 개의 템플릿 유형 중 세 개가 사각형이므로 Windows 8에서 "사각형" 타일(150×150, 1x 플라토)로 사용된 타일을 이제 "중간 크기" 타일이라고 합니다. 따라서 전체 집합에는 작은 타일, 중간 크기 타일, 와이드 타일 및 큰 타일이 있습니다. 네 가지 모든 타일의 예는 다음과 같습니다.

시작 화면에서 네 가지 모든 타일 크기의 예

사용자가 네 개의 작은 타일을 하나의 중간 크기 타일 위치에 맞출 수 있습니다. 작은 타일은 라이브 타일 알림을 지원하지 않지만 배지를 지원합니다. 큰 타일은 와이드 타일 두 개와 같은 공간을 사용하고 Windows 8 타일 크기처럼 라이브 타일 알림을 지원합니다.

타일 템플릿에 대한 새로운 명명 규칙

새 타일 크기를 추가하면서 타일 템플릿에 대한 Windows 8 명명 규칙을 업데이트했습니다. 새로운 규칙에서는 1× 크기 조정 플라토의 절대 픽셀 크기를 사용합니다. 네 가지 타일 크기는 다음과 같이 새 이름에 매핑되고 각 범주에는 많은 템플릿이 있습니다.

  • 작은 타일 = Square70x70
  • 중간 크기 타일 = Square150x150
  • 와이드 타일 = Wide310x150
  • 큰 타일 = Square310x310

마찬가지로 이제 앱 매니페스트에서 SmallLogo 특성을 Square30x30Logo라고 합니다.

새 명령 규칙에 따라 모든 기존 타일 템플릿의 이름이 바뀌었습니다.

이전 이름 새 이름 예제
TileSquare* TileSquare150x150* TileSquareImage(이전 이름)/TileSquare150x150Image(새 이름)
TileWidexxx TileWide310x150xxx TileWideImageAndText01(이전 이름)/TileWide310x150ImageAndText01(새 이름)

 

호환성을 위해 이전 이름도 인식됩니다. 그러나 모든 새로운 개발에서는 새 이름을 사용하세요.

앱 매니페스트의 타일 관련 변경 내용

앱 매니페스트에서 기본 앱 타일의 기본 속성인 지원되는 크기, 표시 이름 및 타일 색을 선언합니다.

새 타일 크기 옵트인(opt in)

Windows 8에서는 앱 매니페스트에서 와이드 타일 자산을 지정하여 앱에 대한 와이드 타일 지원을 옵트인했습니다. Windows 8.1에서는 매니페스트에서 큰 타일 자산을 지정하여 큰(Square310x310) 타일 지원을 옵트인합니다.

참고  앱에서 와이드 타일을 지원하는 경우에만 큰 타일을 지원할 수 있습니다.

모든 앱은 중간 크기(Square150x150) 및 작은 (Square70x70) 타일을 지원합니다. 또한 매니페스트에서 작은 타일 자산을 제공할 수 있습니다. 앱이 작은 타일 이미지를 제공하지 않는 경우 자체 크기 조정 작업을 하거나 별도의 자산을 제공하면 Windows 8.1에서 자동으로 중간 크기 타일 이미지의 크기를 줄입니다.

Windows 8에서처럼 지원하는 각 타일 크기에 대해 네 가지 크기 조정 플라토(0.8x, 1x, 1.4x 및 1.8x)별로 개별 자산을 제공하는 것이 좋습니다. 이렇게 하면 타일이 항상 불필요한 크기 조정 없이 선명하게 표시됩니다. 또한 접근성 향상을 위해 고대비 테마에 대한 이미지 자산을 제공할 수 있습니다.

여러 타일 크기에 대한 앱 이름 표시

Windows 8에서는 앱 매니페스트를 사용하여 앱 이름을 표시하는 타일 크기를 지정했습니다. Windows 8.1에서도 이 작업을 하지만 새로운 형식이 있습니다. 또한 작은(Square70x70) 타일 크기에는 앱 이름을 표시할 수 없습니다.

기본 고정 크기 선언

Windows 8에서는 앱이 와이드 타일을 지원하는 경우 앱이 시작 화면에 와이드 타일로 고정되고, 그렇지 않으면 중간 크기 타일로 고정됩니다. Windows 8.1에서는 이 방식으로 선택적으로 재정의하고 중간 크기 또는 와이드 타일(작은 또는 큰 타일 제외)을 기본 고정 크기로 선언할 수 있습니다. 그러나 Windows 8.1에서는 앱이 설치 시 자동으로 시작 화면에 고정되지 않습니다. 앱이 앱 모두 보기 보기에 나타나므로 여기에서 사용자가 앱을 시작 화면에 고정하도록 명시적으로 선택해야 합니다.

앱 매니페스트 스키마 변경 내용

설명하고 있는 새 기능을 선언하는 스키마 요소를 포함하도록 매니페스트 파일에서 추가 네임스페이스 "https://schemas.microsoft.com/appx/2013/manifest"를 지정합니다. 다음 예제에서는 매니페스트에 표시되는 새 특성과 이름이 바뀐 일부 특성을 보여 줍니다. 기본 설정 기본 크기를 명시적으로 선언하는 DefaultTile 요소 아래에 포함된 큰 타일 자산을 기록해 두세요. 앱에서는 큰 타일을 제외하고 중간 크기 및 와이드 타일에서만 앱 이름을 표시하도록 선택합니다.

<Package 
    xmlns="https://schemas.microsoft.com/appx/2010/manifest" 
    xmlns:wb="https://schemas.microsoft.com/appx/2013/manifest">
    
...

<wb:VisualElements 
    DisplayName="Your app name" 
    Description="App description" 
    BackgroundColor="#464646" 
    ForegroundText="light" 
    ToastCapable="true" 
    Square150x150Logo="Assets\Medium150x150Tile.png" 
    Square30x30Logo="Assets\APVLogo.png">
    
    <wb:DefaultTile 
        Square70x70Logo="Assets\Small70x70Tile.png" 
        Wide310x150Logo="Assets\Wide310x150Tile.png" 
        Square310x310Logo="Assets\Large310x310Tile.png" 
        ShortName="App" 
        DefaultSize="square150x150Logo">
        
        <wb:ShowNameOnTiles>
            <wb:ShowOn Tile="square150x150Logo"/>
            <wb:ShowOn Tile="wide310x150Logo"/> 
        </wb:ShowNameOnTiles>
    </wb:DefaultTile>
    
    <wb:LockScreen 
        Notification="badgeAndTileText" 
        BadgeLogo="Assets\badge.png"/>
    
    <wb:SplashScreen Image="Assets\SplashScreen.png"/>
</wb:VisualElements>

타일 알림 변경 내용

타일 알림을 보낼 경우 앱에서는 Windows 8.1 또는 Windows 8에서 실행되는 동안 알림을 수신할 수 있습니다. 기존 템플릿의 새 이름은 Windows 8.1에서만 인식되므로 스키마가 fallback 특성을 추가했습니다. fallback 특성을 포함하면 알림이 Windows 8 시스템에서 수신되는 경우 알림 페이로드가 Windows 8.1 템플릿을 Windows 8 템플릿과 함께 지정할 수 있습니다. 새 템플릿 이름 및 fallback 특성을 사용하려면 새 version 특성을 포함하고 여기에 표시된 대로 visual 요소에서 값을 2로 설정합니다.

<tile>
  <visual version="2">
    <binding template="TileSquare150x150Image" fallback="TileSquareImage" branding="None">
      <image id="1" src="Assets/Images/w6.png"/>
    </binding>
    <binding template="TileWide310x150Image" fallback="TileWideImage" branding="None">
      <image id="1" src="Assets/Images/sq5.png"/>
    </binding>
    <binding template="TileSquare310x310Image" branding="None">
      <image id="1" src="Assets/Images/sq6.png"/>
    </binding>
  </visual>
</tile>

Windows 8에는 큰 타일이 없으므로 fallback 특성을 큰 타일과 함께 사용할 수는 없습니다. Windows 8 알림은 Windows 8.1에서 변경 없이 잘 작동하지만 큰 타일 크기를 사용할 수 없습니다.

참고  페이로드에 포함된 큰(Square310x310) 타일 템플릿은 마지막 바인딩으로 나열되어야 합니다. Windows 8 시스템은 템플릿 또는 대체 이름을 통해 인식되지 않는 바인딩을 발견할 경우 알림 구문 분석을 중지합니다. 따라서 310×310 바인딩을 발견할 경우 항상 중지합니다.

알림 큐 제목 크기 지정

Windows 8에서는 알림 큐를 사용하도록 설정하면 중간 크기 및 와이드 타일에 대해 모두 사용됩니다. Windows 8.1에서는 특정 타일 크기에 대한 알림 큐를 사용하도록 설정하는 메서드를 TileUpdater 클래스에 추가합니다.

보조 타일의 새 타일 크기 및 대체 로고

Windows 8.1에서는 사용자가 콘텐츠를 보조 타일로 고정할 때 사용자에게 표시되는 플라이아웃을 통해 사용자가 페이지를 넘기고 보조 타일의 사용 가능한 크기 및 모양 중에서 선택할 수 있습니다. 보조 타일은 앱 타일에서 지원되는 모든 타일 크기를 지원할 수 있습니다. 보조 타일에 특정 작은 타일 이미지를 지정하지 않으면 Windows 8.1에서는 정사각형 타일 이미지 크기를 줄여서 사용합니다.

기본 보조 타일 이미지 외에 타일 크기별로 최대 세 개의 대체 버전을 제공할 수 있고 최대 버전 수는 12개입니다. AlternateVisualElements 메서드를 사용하여 로고를 지원하는 세 가지 타일 크기(사각형 타일, 와이드 타일, 큰 타일) 각각에 대해 대체 작은 로고를 지정할 수도 있습니다.

보조 타일 정렬을 위한 더 정확한 표음식 문자열 지원

일본어 같은 특정 문자 기반 언어의 경우 UI에서 정렬 순서는 앱의 표시 이름을 구성하는 문자의 표음식 철자를 기준으로 합니다. 이 표음식 철자는 표시 이름과 구분되는 문자열입니다. 보조 타일을 고정하면 사용자는 고정 플라이아웃에서 해당 타일의 표시 이름을 지정할 수 있지만 표음식 철자를 지정할 수는 없습니다. Windows에서는 표음식 문자열에 관련된다고 추측하지만 항상 올바른 것은 아닙니다.

사용자가 앱에서 제공하는 사용자 지정 컨트롤을 통해 표음식 문자열을 정의하기 때문에 앱이 올바른 표음식 문자열을 인식하기도 합니다. Windows 8.1에서 앱은 새 SecondaryTile.PhoneticName 속성을 통해 해당 문자열을 Windows에 전달합니다. 이 표음식 이름 문자열은 보조 타일과 연결된 기본 표시 이름에 연결됩니다. 따라서 사용자가 고정 플라이아웃을 통해 표시 이름을 변경하면 시스템에서는 표음식 철자가 사용된다고 추측합니다.

검색 업데이트

[지금 SearchBox 컨트롤 샘플을 가져옵니다.]

Windows 8.1에서는 검색 결과를 제공하는 데 도움이 되는 새로운 검색 상자 컨트롤인 XAML을 사용하는 앱용 Windows.UI.Xaml.Controls.SearchBox 및 JavaScript를 사용하는 앱용 WinJS.UI.SearchBox를 제공합니다.

이제 앱이 태그의 요소로 검색 상자를 포함할 수 있습니다. 새 컨트롤은 전체 템플릿 및 스타일을 지원합니다.

Windows 8.1에서 앱 검색 환경은 완전히 앱을 통해 제어됩니다. 검색 상자가 검색 계약에 통합되어 환경을 강화하고 세부적인 사용자 지정을 가능하게 하므로 앱은 사용자의 필요에 맞게 만들어진 환경을 제공할 수 있습니다.

검색 상자는 앱에서 제공하는 검색 제안 및 결과, 앱 특정 검색 기록을 지원하고 터치, 키보드 및 마우스 조작에 대한 전체 지원을 제공합니다.

검색 상자 레이아웃은 다음과 같이 표시됩니다.

Windows 스토어 앱의 앱에서 바로 검색 상자 컨트롤

다음 예제에서는 검색 상자 컨트롤에 표시되는 검색 결과를 보여 줍니다.

MSFT에 대한 검색 상자 결과 예제.

검색 상자 컨트롤은 IME(입력기) 통합을 지원합니다.

IME를 사용한 앱에서 바로 검색 컨트롤.

사용자가 IME를 통해 각 문자를 입력하면 제안이 업데이트됩니다. 제안에는 부분 표음식 입력에 따른 표의 중국어 문자가 포함됩니다. IME 후보 UI는 검색 제안 플라이아웃을 가리지 않습니다. 검색 상자에서는 텍스트 상자, IME 후보 목록 및 검색 제안을 탐색하기 위한 키보드 입력 사용을 지원합니다.

공유 업데이트

[지금 콘텐츠 원본 공유콘텐츠 대상 공유 샘플을 가져옵니다.]

Windows 8.1에서는 공유 환경과 앱에서 공유 계약을 사용하는 방법에 대하여 다음과 같은 변경 내용을 제공합니다.

DataPackage에 새 데이터 형식 추가

Windows 8.1에서 공유 계약의 원본 앱은 여러 가지 방법을 통해 공유되는 콘텐츠로 다시 돌아갈 수 있습니다. Windows 8.1에서는 DataPackage에서 Uri 형식을 두 개의 새로운 데이터 형식으로 구분하고 DataPackagePropertySet에서 강력한 형식의 네 가지 새로운 속성을 제공합니다. DataPackage의 경우 Uri 형식은 사용되지 않고 WebLinkApplicationLink 형식으로 대체되었습니다.

사용자가 아무 것도 선택하지 않으면 WebLink가 공유되므로 원본 앱이 표시된 콘텐츠의 암시적 선택을 공유하고 있는 것입니다. 이 형식을 채우면 원본 앱이 현재 페이지의 콘텐츠를 URI(Uniform Resource Identifier)로 공유합니다. 공유된 링크는 사용자가 보고 있는 웹 페이지를 참조하므로 이 형식은 항상 http 또는 https로 시작됩니다.

사용자가 아무 것도 선택하지 않으면 ApplicationLink도 공유되므로 이 경우도 원본 앱이 표시된 콘텐츠의 암시적 선택을 공유하고 있는 것입니다. 이 형식을 채우면 원본 앱이 현재 페이지의 콘텐츠를 URI로 공유합니다. 공유 URI에는 원본 앱에서 처리되는 체계가 있습니다. 원본 앱이 이 URI 프로토콜을 통해 활성화되면 현재 보고 있는 것과 동일한 콘텐츠가 표시됩니다. 이 형식은 앱 프로토콜을 통해 콘텐츠로 돌아가는 방법을 제공하여 공유 콘텐츠를 나타냅니다.

WebLinkApplicationLink 형식은 함께 사용될 수 있습니다. WebLink는 웹의 콘텐츠에 연결되고 ApplicationLink는 앱의 콘텐츠에 연결됩니다. 예를 들어 URI를 통해 사용자를 다시 앱의 기사로 이동하거나 웹 사이트의 동일한 기사로 이동할 수 있으므로 뉴스 뷰어 앱에는 두 가지 형태의 콘텐츠가 모두 포함될 수 있습니다. 대상 앱은 URI 처리 방법을 선택합니다. 예를 들어 링크가 인터넷에 전송되고 비Windows 시스템에서 사용될 수 있으므로 메일 앱에서는 WebLink 형식을 사용할 수 있습니다. 그러나 뷰어 앱에서는 원본 앱을 다시 활성화하고 사용자를 다시 원래 콘텐츠로 이동하도록 ApplicationLink 형식을 사용할 수 있습니다.

ContentSourceWebLink는 공유 콘텐츠를 특성으로 지정하는 데 사용하는 도우미 속성입니다. 앱이 공유되고 있는 콘텐츠에 대한 웹 링크를 제공하면 이 속성이 공유됩니다. 사용자가 명시적 선택을 하면 WebLink 형식의 값이 사용자의 선택과 동일하지 않기 때문에 WebLink 형식이 채워지지 않습니다. 이 정보를 채우는 것이 웹 페이지가 사용자의 선택임을 의미하지는 않습니다. 콘텐츠가 웹 페이지에서 시작됨을 의미할 뿐입니다.

ContentSourceApplicationLink는 공유 콘텐츠를 특성으로 지정하는 데 사용하는 두 번째 도우미 속성입니다. 앱에서 사용자가 현재 앱에 표시된 콘텐츠로 돌아가야 한다고 인식하면 이 속성이 공유됩니다. 사용자가 선택을 하면 ApplicationLink 형식의 값이 사용자의 선택과 동일하지 않기 때문에 ApplicationLink 형식이 채워지지 않습니다. 이 정보를 채우는 것이 앱에 대한 딥 링크가 사용자의 선택임을 의미하지는 않습니다. 콘텐츠가 웹 페이지에서 시작됨을 의미할 뿐입니다.

예를 들어 사용자가 뷰어 앱에서 기사를 보고 있습니다. 사용자가 인용을 선택하고 OneNote에 공유합니다. 기사가 공유되는 인용과 일치하지 않으므로 뷰어 앱은 기사에 대한 인용을 특성으로 지정하는 데 WebLink 또는 ApplicationLink 형식을 사용하지 않습니다. 대신에 앱은 ContentSourceWebLinkContentSourceApplicationLink 속성을 사용합니다. OneNote가 선택된 텍스트를 원본 특성과 함께 추가합니다. 나중에 OneNote에서 사용자가 인용을 읽을 수 있고 뷰어 앱 또는 웹 페이지로 돌아가서 인용과 관련된 문맥을 읽을 수도 있습니다.

공유 응답성 향상

Windows 8.1에서 공유 계약을 사용하는 앱은 공유 창을 프로그래밍 방식으로 해제하여 응답성을 향상시킬 수 있습니다.

새로운 DismissUI 메서드를 호출하여 공유 창을 닫습니다. DismissUI 호출은 사용자가 공유 창 외부를 탭하여 공유 창을 해제하는 것과 비슷합니다. 공유 작업이 시간이 오래 걸리면 앱이 계속 실행됩니다. 작업이 장시간 실행되지 않으면 10초 후에 실행이 종료됩니다.

현재 대상 앱이 자동으로 화면에서 벗어날 수는 없습니다. 따라서 공유 작업이 시작되면 일반적으로 앱이 진행률 표시기를 표시하고 작업이 완료될 때까지 사용자가 대기하도록 합니다(작업을 완료하는 데 사용자 조작이 필요하지 않은 경우에도). 사용자가 가벼운 탭으로 플라이아웃을 해제하는 것은 실제로 안전하지만 사용자는 공유 작업이 완료되기 전에 해당 해제로 인해 데이터가 손실된다고 생각하는 경향이 있으므로 이렇게 해제하지 않으려고 합니다. DismissUI를 통해 앱이 플라이아웃을 자동으로 해제할 수 있습니다.

패키지 전체 이름

Windows 8.1에서는 공유 계약에 대한 원본 앱이 패키지 전체 이름을 대상 앱에 제공할 수 있으므로 대상 앱에서는 ApplicationLink에서 지정된 앱을 시작할 때 대체 환경을 제공할 수 있습니다.

패키지 전체 이름은 앱 패키지의 고유 식별자입니다. 원본 앱이 이 식별자를 대상 앱에 제공하면 대상 앱에서는 제공된 ApplicationLink와 함께 LaunchUriAsync 메서드를 호출하여 대체 환경을 제공할 수 있습니다. 예를 들어 사용자가 앱을 제거했기 때문에 URI 체계가 처리되지 않거나 URI가 앱이 설치되지 않은 다른 장치로 로밍되는 경우 사용자에게 Windows 스토어에서 앱을 검색하도록 알리는 대화 상자가 표시됩니다. 사용자는 기본적으로 스토어로 이동되지만 필요한 앱으로 이동되지는 않습니다. LaunchUriAsync에 전달되는 LauncherOptions 개체에 패키지 전체 이름을 포함하면 사용자에게 특정 앱을 설치할지 묻는 메시지가 표시되고 사용자는 스토어의 해당 앱 목록 페이지로 이동됩니다.

URI 형식이 사용되지 않음

앞에서 설명한 대로 Windows 8.1에서는 DataPackage에서 Uri 형식을 두 개의 새로운 데이터 형식으로 구분하고 DataPackagePropertySet에서 강력한 형식의 네 가지 새로운 속성을 제공합니다. DataPackage의 경우 Uri 형식은 사용되지 않고 WebLinkApplicationLink 형식으로 대체되었습니다. Uri 형식은 WebLink 형식에 대한 별칭으로 남아 있습니다.

모든 화면의 참 메뉴 작업

Windows 8에서는 화면에 여러 앱이 있는 상태에서 사용자가 참 메뉴를 호출하면 가장 많은 화면 공간을 사용하는 앱에 대한 참 메뉴가 표시되었습니다. Windows 8.1에서는 화면에 표시된 앱 개수나 화면이 여러 개 있는지에 관계없이 사용자가 조작한 마지막 앱에 대한 참 메뉴가 표시됩니다. 예를 들어 사용자가 설정 참 메뉴를 선택하면 마지막으로 사용한 앱에 대한 설정 플라이아웃이 표시됩니다.

앱 크기에 관계없이 참 메뉴에서 작동하도록 앱을 디자인하세요. 특히 설정 플라이아웃의 너비는 현재 앱 너비보다 작거나 같아야 합니다.

사람 및 이벤트와 통합되는 앱 빌드

[지금 연락처 관리자 API(영문), 약속 API, 및 연락처 작업 처리(영문) 샘플을 가져옵니다.]

Windows 8.1에서는 사람과 이벤트의 영향력을 앱에 통합합니다. 앱 사용자가 앱 내에서 알고 있는 사람들에 대한 정보를 조회하고 메시징, 메일, 통화, 영상 통화 등의 통신 환경을 통합하여 사람들과 관계를 맺도록 할 수 있습니다. 또한 사용자가 일정 가용성을 빠르게 확인하고 이벤트를 기본 설정 일정에 추가하도록 하여 사용자를 앱에서 유지할 수도 있습니다.

이 새로운 API를 사용하여 앱에서 사람들의 대화 상대 카드를 확인하고 이벤트를 관리하도록 할 수 있습니다.

  • ShowContactCard method

    앱이 운영 체제에서 사용자 연락처를 쿼리하고 사용자의 연락처 데이터를 대화 상대 카드에 표시하도록 합니다.

  • AppointmentsProvider 네임스페이스

    약속 공급자와 상호 작용하도록 활성화함으로써 약속 추가, 약속 변경, 약속 취소를 지원합니다.

  • AppointmentManager class

    앱에서 이벤트 추가, 변경, 삭제를 위해 사용자의 약속 공급자와 상호 작용하도록 활성화할 수 있습니다. 또한 약속 공급자에 대한 기본 UI를 표시합니다.

  • Activation 네임스페이스

    앱에서 Windows가 지원하는 새 약속 공급자 및 연락처 계약에 대한 활성화 매개 변수를 처리하도록 합니다.

음성 합성

[지금 음성 합성 샘플을 가져옵니다.]

Windows 8.1에서는 Windows 스토어 앱에서 —TTS(텍스트 음성 변환)라고도 하는— 음성 합성을 지원하는 Windows.Media.SpeechSynthesis API를 제공합니다.

음성 합성을 사용하여 사용자에게 입력, 강조 앱 알림 및 메시지 대화 상자에 대한 메시지를 표시하고, Turn-by-Turn 탐색 같은 지침을 제공하고, 텍스트나 메일 메시지, RSS 피드, 책, 검색 결과 같은 콘텐츠를 읽습니다.

Windows 8.1에는 음성이라고 하는 많은 음성 합성 엔진이 포함됩니다. 각 음성에는 앱에서 지정하거나 사용자가 언어 제어판에서 선택할 수 있는 Microsoft David(en-US, 남성), Microsoft Zira(en-US, 여성) 및 Microsoft Hazel(en-UK, 여성) 같은 친숙한 이름이 있습니다.

Windows 8.1에서 지원되는 음성 합성 기능을 통해 다음과 같이 할 수 있습니다.

  • 음성 신시사이저를 특정 성별, 음성 및 언어로 설정합니다.

  • 현재 음성의 기본 특징 및 속성을 사용하여 일반 텍스트 문자열에서 음성 출력을 생성합니다.

  • 음성 특징, 발음, 볼륨, 피치, 비율 또는 속도, 강도 등을 사용자 지정하기 위해 SSML(Speech Synthesis Markup Language)이 포함된 문자열에서 음성 출력을 생성합니다.

  • 임의 액세스 스트림을 대상으로 음성 합성 엔진에서 생성된 오디오 데이터를 읽고 씁니다.

일반 텍스트에서 음성을 생성합니다.

이 예제에서는 Windows 스토어 앱에서 SpeechSynthesizer 개체를 사용하여 오디오 스트림을 만들고 일반 텍스트 문자열을 기반으로 음성을 생성하는 방법을 보여 줍니다.

// The object for controlling and playing audio.
var audio = new Audio();

// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

// Generate the audio stream from plain text.
synth.synthesizeTextToStreamAsync("hello World").then(function (markersStream) {

    // Convert the stream to a URL Blob.
    var blob = MSApp.createBlobFromRandomAccessStream(markersStream.ContentType, markersStream);

    // Send the Blob to the audio object.
    audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
    audio.play();
});
// The media object for controlling and playing audio.
MediaElement mediaElement = this.media;

// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

// Generate the audio stream from plain text.
SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Hello World");

// Send the stream to the media object.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();

SSML(Speech Synthesis Markup Language)에서 음성 출력을 생성합니다.

다음 예제에서는 Windows 스토어 앱에서 SpeechSynthesizer 개체를 사용하여 오디오 스트림을 만들고 SSML 텍스트 문자열을 기반으로 음성을 생성하는 방법을 보여 줍니다.

// The string to speak with SSML customizations.
var Ssml = "<speak version='1.0' " +
    "xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
    "Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World</prosody> " + 
    "<break time='500ms' />" +
    "Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World</prosody>" +
    "</speak>";

// The object for controlling and playing audio.
var audio = new Audio();

// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

// Generate the audio stream from SSML.
synth.synthesizeSsmlToStreamAsync(Ssml).then(function(synthesisStream){

    // Convert the stream to a URL Blob.
    var blob = MSApp.createBlobFromRandomAccessStream(synthesisStream.ContentType, synthesisStream);

    // Send the Blob to the audio object.
    audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
    audio.play();
});
// The string to speak with SSML customizations.
string Ssml =
    @"<speak version='1.0' " +
    "xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
    "Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World</prosody> " + 
    "<break time='500ms' />" +
    "Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World</prosody>" +
    "</speak>";

// The media object for controlling and playing audio.
MediaElement mediaElement = this.media;

// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

// Generate the audio stream from SSML.
SpeechSynthesisStream stream = await synth.synthesizeSsmlToStreamAsync(Ssml);

// Send the stream to the media object.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();

백그라운드 작업 관리에 대한 업데이트

[지금 백그라운드 작업 샘플을 가져옵니다.]

Windows 8.1에는 백그라운드 작업에 대한 다음과 같은 몇 가지 새로운 기능이 추가되었습니다.

방해 금지 모드 및 백그라운드 작업

방해 금지 모드는 사용자가 알림으로 방해를 받고 싶지 않은, 하루 중 특정 시간을 지정할 수 있는 Windows 8.1의 새로운 기능입니다. 또한 이 기능은 Windows 스토어 앱과 관련된 백그라운드 활동 대부분을 중지하여 사용자가 방해를 받지 않도록 하며 잠재적으로 장치의 연결된 대기 상태 수명을 늘려줍니다.

시스템이 방해 금지 모드로 전환되면 백그라운드 작업이 대기 되며 방해 금지 모드가 끝날 때까지 보류됩니다. 시스템이 방해 금지 모드로 전환되면 현재 실행 중인 백그라운드 작업이 취소됩니다.

방해 금지 모드가 끝날 때 백그라운드 작업이 백업을 시작할 수 있습니다. 각 백그라운드 작업은 시스템이 방해 금지 모드에서 벗어날 때 임의 간격으로 다시 시작됩니다. 따라서 백그라운드 작업이 모두 동시에 방해 금지 모드에서 해제되지 않습니다. 모두 동시에 해제되는 경우 시스템 리소스 및 원격 서버 리소스에 불필요한 부하를 가하게 됩니다. 시스템은 지정된 방해 금지 모드 종료 시간까지 알림을 트리거하지 않습니다.

기본적으로 방해 금지 모드에 대해 허용되는 2가지 예외가 있습니다. 하나는 새로운 잠금 화면 통화 기능을 지원하는 앱에서 수신되는 걸려오는 전화 통화이고, 다른 하나는 지정된 기본 알람 앱에서 사용자가 설정한 알람입니다. 이 앱이 잠금 화면 통화 가능 앱이고 IncomingCall 설정이 TRUE로 설정되어 있으면 백그라운드 작업이 실행되고 알림이 전달됩니다. 지정된 기본 알람 앱에서 사용자가 설정한 알람에서 보내는 알림은 방해 금지 모드에서 전달됩니다.

방해 금지 모드는 기본적으로 자정에서 오전 6시까지 사용하도록 설정되며, 걸려오는 통화는 허용됩니다. 사용자는 PC 설정 변경의 앱 섹션에 있는 알림 탭에서 이러한 설정을 변경하거나 방해 금지 모드를 사용하지 않도록 설정할 수 있습니다. 방해 금지 모드는 모든 시스템에서 사용할 수 있습니다.

유휴 작업 취소

백그라운드 작업 리소스 제약 조건 외에, Windows 백그라운드 작업 인프라에서는 유휴 또는 응답 없는 백그라운드 작업을 검색합니다. 백그라운드 작업은 최소 시간(시스템 상태에 따라 다름) 내에 최소 CPU 또는 네트워크 리소스 할당량을 사용하지 않은 경우 유휴 상태이거나 응답 없는 것으로 간주됩니다. 유휴 또는 응답 없는 백그라운드 작업이 검색되면 작업을 중지하고 닫을 수 있도록 해당 백그라운드 작업에 취소 알림이 전송됩니다. 백그라운드 작업이 5초 내에 작업을 중지하지 않고 닫히지 않으면 앱이 응답하지 않는 것으로 간주되어 시스템에서 해당 앱을 종료합니다.

Windows 8.1에서는 유휴 또는 응답 없는 백그라운드 작업으로 인해 앱이 종료되지 않도록 하세요. 항상 취소 처리기를 연결하여 해당 작업이 확실하게 취소되도록 하세요. 자세한 내용과 코드 조각은 유휴 또는 응답 없는 백그라운드 작업을 처리하는 방법을 참조하세요.

백그라운드 작업에 대한 작업 비용 힌트

Windows 8.1에서는 백그라운드 작업에 리소스 가용성에 대한 힌트를 제공합니다. 백그라운드 작업이 활성화되면 이 힌트를 사용하여 수행할 작업량을 확인할 수 있습니다. 세 가지 백그라운드 리소스 상태 즉 낮음, 보통 및 높음이 보고될 수 있습니다. 자세한 내용은 BackgroundWorkCostBackgroundWorkCostValue를 참조하세요.

백그라운드 작업용 PowerShell cmdlet

개발자는 새 AppBackgroundTask PowerShell 명령 및 새 BackgroundTasksManager cmdlet 디자이너 모듈을 사용하여, 실행되고 있는 백그라운드 작업에 대한 정보를 검색할 수 있습니다. 이러한 정보는 백그라운드 작업을 구현하고 디버그할 때 매우 유용할 수 있습니다. 자세한 내용은 백그라운드 작업용 PowerShell cmdlet을 참조하세요.

잠금 화면에서 알람 앱 지원

[지금 알림 샘플을 가져옵니다.]

Windows 8.1에서는 잠금 화면 슬롯 중 하나가 알람 앱에 사용됩니다. 알람 앱은 AlarmApplicationManager 클래스를 사용하여 시스템 알람 앱이 되기 위해 필요한 권한을 사용자에게 요청합니다. 사용자가 권한을 부여하거나 제어판을 사용하여 알람 슬롯에 앱을 배치하면 앱이 슬롯을 사용하고 시스템 알람 앱이 됩니다. 시스템 알람 앱에서 실행된 알람 알림은 1초 내에 정확하게 사용자에게 표시됩니다. 알람 슬롯의 앱만 알람 알림을 실행할 수 있고 다른 앱에서 실행된 알람 알림은 일반 알림으로 처리됩니다.

commands 요소로 알림 메시지를 만들어서 알람 알림을 예약합니다. 또한 audio 요소를 사용하여 시스템이 음소거된 경우에도 알림이 실행될 때 재생되는 알람 소리를 지정합니다.

작업 항목 일정에 대한 업데이트

CoreDispatcher(Windows::UI::Core:CoreDispatcher) API를 사용하여 작업 항목 일정에서 우선 순위를 더 세부적으로 제어할 수 있습니다.

Windows 8.1에서는 작업 디스패치 우선 순위가 다음 순서로 지정됩니다.

  1. SendMessage(최고 우선 순위)
  2. CoreDispatcherPriority.High
  3. CoreDispatcherPriority.Normal(창 메시지 및 COM(구성 요소 개체 모델) 호출 포함)
  4. 임의 장치 입력 메시지
  5. CoreDispatcherPriority.Low
  6. CoreDispatcherPriority.Idle(최저 우선 순위, 백그라운드 작업에 사용됨)

작업 우선 순위를 변경하려면 CoreDispatcher 유형에 다음과 같은 새 멤버를 사용합니다.

  • CoreDispatcher::ShouldYield 메서드(2개 오버로드)—작업 큐에 지정된 우선 순위 이상의 항목이 있는 경우 호출자가 양보할지 여부를 쿼리합니다.

  • CoreDispatcher::CurrentPriority 속성—CoreDispatcher에서 가장 최근에 처리한 작업의 현재 우선 순위를 가져오거나 설정합니다. 앱이 특정 우선 순위의 작업을 처리하고 있는데 더 높은 우선 순위 작업이 들어오는 경우 ShouldYield가 더 정확한 결과를 제공하도록 이 속성을 설정하여 현재 작업의 우선 순위를 올립니다.