将 Windows Phone Silverlight 移植到适用于 I/O、设备和应用模型的 UWP 平台

上一主题是 移植 XAML 和 UI

与设备本身及其传感器集成的代码涉及用户的输入和输出。 它还可能涉及处理数据。 但是,此代码通常不被视为 UI 层或数据层。 此代码包括与振动控制器、加速计、陀螺仪、麦克风和扬声器(与语音识别和合成相交)、(地理)位置和输入形式(如触摸、鼠标、键盘和笔)的集成。

应用程序生命周期(进程生存期管理)

Windows Phone Silverlight 应用包含用于保存和还原其应用状态及其界面状态的代码,从而支持被挂起并随后重新激活。 通用 Windows 平台(UWP)应用的应用生命周期与 Windows Phone Silverlight 应用的应用生命周期具有很强的相似性,因为它们都设计了相同的目标,即最大限度地利用用户选择在前台使用的任何应用的资源。 你会发现你的代码可以轻松适应新系统。

注意 按硬件 后退 按钮会自动终止 Windows Phone Silverlight 应用。 在移动设备上按硬件 “后退”按钮 不会 自动终止 UWP 应用。 相反,它会暂停,然后可能会终止。 但是,对于响应应用程序生命周期事件的应用而言,这些详细信息是透明的。

“debounce window”是应用程序变为非活动状态与系统引发暂停事件之间的时间段。 对于 UWP 应用,没有消抖窗口,当应用变为非活动状态时,将立即触发挂起事件。

有关详细信息,请参阅 应用生命周期

照相机

Windows Phone Silverlight 相机捕获代码使用 Microsoft.Devices.CameraMicrosoft.Devices.PhotoCameraMicrosoft.Phone.Tasks.CameraCaptureTask 类。 若要将该代码移植到通用 Windows 平台(UWP),可以使用 MediaCapture 类。 CapturePhotoToStorageFileAsync 主题中有一个代码示例。 此方法允许你将照片捕获到存储文件中,并且它要求在应用包清单中设置 麦克风摄像头设备 功能。

另一个选项是 CameraCaptureUI 类,该类还需要 麦克风摄像头设备功能

UWP 应用不支持 Lens 应用。

检测应用正在运行的平台

在 Windows 10 中,关于应用目标定位的思维方式发生了变化。 新的概念模型是应用面向通用 Windows 平台(UWP)并在所有 Windows 设备上运行。 然后,它可以选择点亮特定设备系列专属的功能。 如果需要,应用还可以选择将自身限制为专门面向一个或多个设备系列。 有关什么是设备系列以及如何确定要面向哪个设备系列的更多详细信息,请参阅 UWP 应用指南

注意 建议不要使用操作系统或设备系列来检测功能是否存在。 确定当前操作系统或设备系列通常不是确定是否存在特定操作系统或设备系列功能的最佳方法。 测试功能本身是否存在(请参阅 条件编译和自适应代码),而不是检测操作系统或设备系列(以及版本号)。 如果必须要求特定的操作系统或设备系列,请确保将其用作受支持的最低版本,而不是设计该版本的测试。

若要根据不同的设备定制应用的 UI,我们建议使用几种技术。 继续像往常一样使用自动调整大小的元素和动态布局面板。 在 XAML 标记中,继续使用有效像素(以前称为视图像素)的大小,从而使 UI 适应不同的分辨率和缩放因子(请参阅 视图/有效像素、观看距离和比例系数。)。 使用 Visual State Manager 的自适应触发器和设置器将用户界面适配为窗口大小(请参阅 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 类获取有关运行应用的设备的信息。 虽然 Microsoft.Phone.Info 命名空间没有直接的 UWP 等效项,但可以在 UWP 应用中使用一些属性和事件来代替对 DeviceStatus 类成员的调用。

Windows Phone Silverlight UWP(通用Windows平台)
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%时(仅限移动设备系列),将引发此事件。

位置

当在其应用包清单中声明 Location 功能的应用在 Windows 10 上运行时,系统将提示最终用户同意。 因此,如果你的应用程序显示自己的自定义同意提示,或者提供启用/禁用开关功能,那么你需要删除这些,以便最终用户只提示一次。

取向

PhoneApplicationPage.SupportedOrientationsOrientation 属性在 UWP 应用中对应的是应用包清单中的 uap:InitialRotationPreference 元素。 如果尚未选中 应用程序 选项卡,请在 支持的旋转 下选中一个或多个复选框来记录首选项。

但是,无论设备方向和屏幕大小如何,都鼓励你设计 UWP 应用的 UI,使其看起来很棒。 有关此内容的详细信息,请参阅 移植的外形规格和用户体验,这是下一个主题。

下一主题是 移植业务层和数据层