Windows Runtime 8.x를 I/O, 장치 및 앱 모델에 대해 UWP로 포팅하기

이전 토픽은 XAML 및 UI 포팅하기입니다.

사용자의 입력 및 출력이 장치 자체 및 해당 센서와 통합되는 코드에 포함됩니다. 또한 데이터 처리가 포함될 수 있습니다. 그러나 일반적으로 이 코드는 UI 계층 또는 데이터 계층으로 생각되지 않습니다. 이 코드는 진동 컨트롤러, 가속도계, 자이로스코프, 마이크 및 스피커(음성 인식 및 합성과 교차), (지리적) 위치 및 터치, 마우스, 키보드 및 펜과 같은 입력 형식과의 통합을 포함합니다.

애플리케이션 수명 주기(프로세스 수명 관리)

Universal 8.1 앱의 경우, 2초의 "디버그 기간"이 앱이 비활성 상태가 되고 시스템이 일시 중단 이벤트를 발생시키는 사이에 발생합니다. 이 디버그 창을 일시 중단하는 추가 시간으로 사용하는 것은 안전하지 않으며, UWP(Universal Windows Platform) 앱의 경우 디버그 창이 전혀 없습니다. 일시 중단 이벤트는 앱이 비활성 상태가 되는 즉시 발생합니다.

자세한 정보는 앱 수명 주기를 참조하세요.

백그라운드 오디오

MediaElement.AudioCategory 속성의 경우, Windows 10 앱에서 ForegroundOnlyMediaBackgroundCapableMedia는 더 이상 사용되지 않습니다. Windows Phone Store 앱 모델을 대신 사용합니다. 자세한 정보는 백그라운드 오디오를 참조하세요.

앱이 실행되고 있는 플랫폼 검색하기

Windows 10의 등장으로 앱 대상에 대해 생각하는 방식이 바뀝니다. 앱이 UWP(Universal Windows Platform)를 대상으로 하며 모든 Windows 장치에서 실행된다는 것이 새로운 개념적 모델입니다. 이는 특정 장치 패밀리에만 적용되는 기능을 켜도록 선택할 수 있습니다. 필요한 경우 앱에는 하나 이상의 장치 패밀리를 대상으로 지정하도록 제한하는 옵션도 있습니다. 장치 패밀리가 무엇인지(및 대상으로 지정할 장치 패밀리를 결정하는 방법)에 대한 자세한 정보는 UWP 앱 가이드를 참조하세요.

Universal 8.1 앱에 실행 중인 운영 체제를 감지하는 코드가 있는 경우, 논리의 이유에 따라 이를 변경해야 할 수 있습니다. 앱이 값을 전달하고 동작하지 않는 경우, 운영 체제 정보를 계속 수집할 수 있습니다.

참고 운영 체제 또는 장치 패밀리를 사용하여 기능의 존재를 감지하지 않는 것이 권장됩니다. 현재 운영 체제 또는 장치 패밀리를 식별하는 것은 일반적으로 특정 운영 체제 또는 장치 패밀리 기능이 있는지 여부를 확인하는 가장 좋은 방법이 아닙니다. 운영 체제 또는 장치 패밀리(및 버전 번호)를 검색하는 대신 기능 자체의 존재 여부를 테스트합니다(조건부 컴파일 및 적응 코드 참조). 특정 운영 체제 또는 장치 패밀리가 필요한 경우, 해당 버전에 대한 테스트를 디자인하는 대신 지원되는 최소 버전으로 사용해야 합니다.

 

다른 장치에 맞도록 앱의 UI를 조정하기 위해 권장되는 몇 가지 기술이 있습니다. 항상 사용하듯이 자동 크기가 조정된 요소와 동적 레이아웃 패널을 계속 사용합니다. XAML 태그에서 유효 픽셀(이전의 보기 픽셀)의 크기를 계속 사용하여 UI가 다양한 해상도 및 배율 인수에 적응하도록 합니다(유효 픽셀, 보기 거리 및 배율 인수 참조). UI를 창 크기에 맞게 조정하기 위해 Visual State Manager의 적응형 트리거 및 setter를 사용합니다(UWP 앱 가이드 참조).

그러나 장치 패밀리를 검색할 수 없는 시나리오가 있는 경우, 이를 수행할 수 있습니다. 이 예시는 AnalyticsVersionInfo 클래스를 사용하여 적절한 경우 모바일 장치 패밀리에 맞게 조정된 페이지로 이동하고, 그렇지 않으면 기본 페이지로 대체해야 합니다.

   if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile")
        rootFrame.Navigate(typeof(MainPageMobile), e.Arguments);
    else
        rootFrame.Navigate(typeof(MainPage), e.Arguments);

또한 앱은 실행 중인 장치 패밀리를 적용되는 리소스 선택 요소에서 확인할 수 있습니다. 아래의 예시는 이 작업을 명령적으로 수행하는 방법을 보여 줍니다. ResourceContext.QualifierValues 토픽에서는 장치 패밀리 요소에 따라 장치 패밀리별 리소스를 로드하는 클래스에 대한 보다 일반적인 사용 사례를 설명합니다.

var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
string deviceFamilyName;
bool isDeviceFamilyNameKnown = qualifiers.TryGetValue("DeviceFamily", out deviceFamilyName);

또한 조건부 컴파일 및 적응 코드를 참조하세요.

위치

Windows 10에서 앱 패키지 매니페스트에서 위치 기능을 선언하는 앱이 실행되면, 시스템에서 최종 사용자에게 동의를 요청합니다. 이는 앱이 Windows Phone Store 앱이든 Windows 10 앱이든 마찬가지입니다. 따라서 자체 사용자 지정 동의 프롬프트가 앱에 표시되거나 온-오프 토글이 제공되는 경우, 최종 사용자에게 한 번만 메시지가 표시되도록 제거하려고 합니다.