將 Windows Phone Silverlight 移植到適用於 I/O、裝置和應用程式模型的 UWP

上一個主題是移植 XAML 和 UI

與裝置本身及其感應器整合的程式碼涉及使用者的輸入和輸出。 它還可能涉及處理數據。 但是,此程式碼通常不會視為 UI 層或資料層。 此程式碼包括與振動控制器、加速計、陀螺儀、麥克風和喇叭 (與語音識別和合成交集) 、 (地理) 位置和輸入方式 (觸控、滑鼠、鍵盤和手寫筆等) 的整合。

應用程式生命週期 (程序生命週期管理)

您的 Windows Phone Silverlight 應用程式包含用於保存和還原其應用程式狀態及其檢視狀態的程式碼,以支援邏輯刪除和隨後重新啟動。 通用 Windows 平台 (UWP) 應用程式的應用程式生命週期與 Windows Phone Silverlight 應用程式的非常相似,因為它們的設計目標相同,即無論使用者選擇在前景執行哪個應用程式,都能隨時最大化該應用程式的可用資源。 您會發現您的程式碼將能輕鬆且合理地適應新系統。

注意 按下硬體返回按鈕會自動終止 Windows Phone Silverlight 應用程式。 按下行動裝置上的硬體返回按鈕不會自動終止 UWP 應用程式。 而是會變成暫停,然後才可能終止。 但是,這些詳細資訊對於適當回應應用程式生命週期事件的應用程式來說是透明的。

「防抖時段」是應用程式變成非使用中和系統引發暫停事件之間的一段時間。 而 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 的調適型觸發程序和設定器,讓 UI 適應視窗大小 (請參閱 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
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 設計得美觀,使其無論在何種裝置方向和螢幕尺寸上都能看起來很順眼。 如需更多相關內容,請參閱針對外形規格和使用者體驗進行移植,這是下下一個主題。

下一個主題是移植商務層和資料層