I/O, 장치 및 앱 모델을 위해 Windows Phone Silverlight를 UWP로 포팅하기

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

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

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

Windows Phone Silverlight 앱에는 삭제 표시 및 이후에 다시 활성화되도록 지원하기 위해 애플리케이션 상태와 보기 상태를 저장하고 복원하는 코드가 포함되어 있습니다. UWP(Universal Windows Platform) 앱의 앱 수명 주기는 Windows Phone Silverlight 앱과 강력한 유사점이 있습니다. 둘 다 사용자가 포그라운드에 있는 어떤 앱에서든 사용할 수 있는 리소스를 최대화하는 동일한 목표로 설계되었기 때문에 언제든지 포그라운드에 있습니다. 새 시스템에 쉽게 맞도록 코드가 조정된다는 것을 알 수 있습니다.

참고 하드웨어 뒤로 가기 버튼을 누르면 Windows Phone Silverlight 앱이 자동으로 종료됩니다. 모바일 장치에서 하드웨어 뒤로 가기 버튼을 누르면 UWP 앱은 자동으로 종료되지 습니다. 대신 일시 중단되고 종료될 수 있습니다. 그러나 이러한 세부 정보는 애플리케이션 수명 주기 이벤트에 적절하게 응답하는 앱에 투명하게 공개됩니다.

"디바운스 창"은 앱이 비활성 상태가 되는 기간과 일시 중단 이벤트를 발생시키는 시스템 사이의 기간입니다. UWP 앱의 경우, 디바운스 창이 없습니다. 일시 중단 이벤트는 앱이 비활성 상태가 되는 즉시 발생합니다.

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

카메라

Windows Phone Silverlight 카메라 캡처 코드는 Microsoft.Devices.Camera, Microsoft.Devices.PhotoCamera 또는 Microsoft.Phone.Tasks.CameraCaptureTask 클래스를 사용합니다. 해당 코드를 UWP(Universal Windows Platform)로 포팅하려면, MediaCapture 클래스를 사용할 수 있습니다. 코드 예시는 CapturePhotoToStorageFileAsync 토픽에 있습니다. 이 방법을 사용하면 사진을 스토리지 파일에 캡처할 수 있으며, 앱 패키지 매니페스트에서 마이크웹캠디바이스 기능을 설정해야 합니다.

또 다른 옵션은 마이크웹캠디바이스 기능을 필요로 하는 CameraCaptureUI 클래스입니다.

UWP 앱에서 Lens 앱은 지원되지 않습니다.

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

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

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

다른 장치에 맞도록 앱의 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 Phone Silverlight 앱은 Microsoft.Phone.Info.DeviceStatus 클래스를 사용할 수 있습니다. 직접 UWP에 해당하는 Microsoft.Phone.Info 네임스페이스가 전혀 없으므로, 여기에서는 DeviceStatus 클래스의 멤버를 호출하는 대신 UWP 앱에서 사용할 수 있는 몇 가지 속성 및 이벤트를 보여 줍니다.

Windows Phone Silverlight UWP
ApplicationCurrentMemoryUsageApplicationCurrentMemoryUsageLimit 속성 MemoryManager.AppMemoryUsageAppMemoryUsageLimit 속성
ApplicationPeakMemoryUsage 속성 Visual Studio에서 메모리 프로파일링 도구를 사용합니다. 자세한 정보는 메모리 사용량 측정하기를 참조하세요.
DeviceFirmwareVersion 속성 EasClientDeviceInformation.SystemFirmwareVersion 속성(데스크톱 장치 패밀리에만 해당)
DeviceHardwareVersion 속성 EasClientDeviceInformation.SystemHardwareVersion 속성(데스크톱 장치 패밀리에만 해당)
DeviceManufacturer 속성 EasClientDeviceInformation.SystemManufacturer 속성(데스크톱 장치 패밀리에만 해당)
DeviceName 속성 EasClientDeviceInformation.SystemProductName 속성(데스크톱 장치 패밀리에만 해당)
DeviceTotalMemory 속성 해당 항목 없음
IsKeyboardDeployed 속성 해당하는 항목이 없습니다. 이 속성은 일반적으로 사용되지 않는 모바일 장치를 위한 하드웨어 키보드에 대한 정보를 제공합니다.
IsKeyboardPresent 속성 해당하는 항목이 없습니다. 이 속성은 일반적으로 사용되지 않는 모바일 장치를 위한 하드웨어 키보드에 대한 정보를 제공합니다.
KeyboardDeployedChanged 이벤트 해당하는 항목이 없습니다. 이 속성은 일반적으로 사용되지 않는 모바일 장치를 위한 하드웨어 키보드에 대한 정보를 제공합니다.
PowerSource 속성 해당 항목 없음
PowerSourceChanged 이벤트 RemainingChargePercentChanged 이벤트(모바일 장치 패밀리에만 해당)를 처리합니다. RemainingChargePercent 속성(모바일 장치 패밀리에만 해당)의 값이 1% 감소하면 이벤트가 발생합니다.

위치

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

방향

PhoneApplicationPage.SupportedOrientationsOrientation 속성에 해당하는 UWP 앱은 앱 패키지 매니페스트의 uap:InitialRotationPreference 요소입니다. 아직 선택되지 않은 경우 애플리케이션 탭을 선택하고 지원되는 회전에서 하나 이상의 검사 상자를 선택하여 기본 설정을 기록합니다.

그러나 장치 방향 및 화면 크기에 관계없이 UWP 앱의 UI를 멋지게 디자인하는 것이 좋습니다. 다음 토픽은 폼 팩터 및 사용자 환경에 대해 포팅하기에 대한 자세한 정보입니다.

다음 토픽은 비즈니스 및 데이터 계층 포팅하기입니다.