HoloLens使用Universal Windows Platform (UWP)提供的應用模型。UWP應用模型定義了應用如何被安全和完全地安裝、更新、版本控制和移除。它管理了應用生命周期 - 應用如何被執行、休眠和中斷 - 以及如何保留應用狀態。它也覆蓋了和操作系統、文件以及其他應用的集成和交互。
應用生命周期 App lifecycle
全息應用的生命周期涉及到了標准應用的概念,例如放置。啟動、中斷和移除。
放置就是啟動 Placement is launch
每一個應用都通過放置應用磁貼在HoloLens shell中啟動。這些應用磁鐵,在放置的時候,就將開始運行應用。這些應用磁貼會持久化的停留在它們被放置的位置,任何時候你都可以從它們返回應用。
一旦完成放置(除非放置是由應用間啟動喚起的),應用開始啟動。HoloLens應用同一時刻可以運行一個應用。一旦你放置和啟動了一個應用,任何其他激活的應用都會被掛起,在你放置它的地方,應用磁貼上會留下一個它最后狀態的截圖。閱讀標准生命周期的文章來了解更多關於處理恢復和其他生命周期事件的方法。
移除是關閉/終止處理 Remove is close/terminate process
當你從世界中移除一個放置好的應用磁貼,這閉合了基礎的流程。這對於確保你的應用被終止或者重啟一個有問題的應用可能是有用的。
應用暫停/終止 App suspension/termination
使用HoloLens,用戶能夠為一個應用創建多個啟動入口。它們通過從開始菜單啟動你的應用,並將應用磁貼放置在世界中來做到這點。每一個應用磁貼都表現為不同的啟動入口,在系統中都具有一個單獨的磁貼實例。SecondaryTile.FindAllAsync() 查詢的隊列將可以列出所有應用的二級磁貼。
當一個UWP應用暫停時,應用當前狀態的屏幕截圖被獲取。
與其他Windows 10平台的關鍵區別是通過CoreApplication.Resuming和CoreApplication.Activated事件,應用如何被通知它的一個實例被激活。
情況 | 恢復 | 激活 |
從開始菜單啟動一個應用新實例 | 使用一個新的TileId激活應用 | |
從開始菜單啟動第二個應用實例 | 使用一個新的TileId激活應用 | |
選中當前未激活的應用實例 | 使用實例關聯的TileId激活應用 | |
選中一個不同的應用,然后選中先前激活的實例 | 恢復被觸發 | |
選中一個不同的應用,然后選中先前未激活的實例 | 恢復被觸發 | 然后使用實例關聯的TileId激活應用 |
擴展的執行 Extended execution
有時你的應用需要繼續在后台做一些工作或者播放聲音。Background tasks 在Windows Holographic里是可以使用的,但是有一些限制。
應用視圖 App views
當你的應用激活時,你可以選擇顯示哪種類型的視圖。對一個應用CoreApplication來說,總存在一個初始的應用視圖(app view)和任意數量的其他你想創建的次級視圖。對於桌面環境,你可以認為一個應用視圖就是一個窗口。我們的全息應用項目模板將會創建一個初始視圖是全息視圖的Unity項目。你的應用可以使用像Xaml這樣的技術來創建額外的2D視圖來使用應用內購買之類的shell控件。如果你的應用以通用應用形式啟動,那么初始視圖會是2D的,但是你可以通過添加一個額外的全息視圖來提升在HoloLens的體驗。想象一下,我們用XAML構建了一個圖片查看器,里面有個視圖切換按鈕,可以一鍵切換到全息視圖,在全息視圖中,來自應用的照片飛到世界和物體表面上。
創建一個全息視圖 Create a Holographic view
全息視圖是指那些通過HolographicSpace 類型創建了全息視圖的應用。
混合世界中的2D視圖 2D view in the Mixed World
任何非全息視圖的在你的世界中都會被渲染成2D視圖.
次級視圖磁貼的放置 Placement of further App Tiles
使用二級磁貼(Secondary Tile) API你可以放置任意數量你想要的2D視圖。這些被放置的磁貼將會以閃屏的形式出現,用以來之后啟動你的應用。Windows Holographic當前不支持渲染任何2D磁貼作為動態磁貼。在二級磁貼API(Secondary tile APIs)頁面你可以了解到更多信息。
切換視圖 Switching views
從2D視圖切換到全息視圖 Switching from the 2D XAML view to the holographic view
如果用戶使用了XAML,然后XAML IFrameworkViewSource將會控制應用的首個視圖。應用需要在激活CoreWindow之前切換到全息視圖,以保證應用直接進入全息體驗。
使用CoreApplication::CreateNewView 和 ApplicationViewSwitcher::SwitchAsync 來實現視圖的切換。
注意:
- 當從XAML視圖切換到全息視圖或將被從世界中移除的應用面板時,不要為SwitchAsync方法指定Consolidate標記
- SwitchAsync方法應該被你想要切換去的視圖關聯的Dispatcher所調用
- 如果你需要啟動一個虛擬鍵盤或想要激活其他應用,你需要使用SwitchAsync方法回到XAML視圖
從全息視圖切換回鍵盤XAML視圖 Switching from the holographic view back to a keyboard XAML view
在視圖間反復切換通常是為了在全息應用顯示一個鍵盤。如果你的應用顯示了一個2D視圖,shell只能夠顯示系統鍵盤。如果你的應用需要獲取文本輸入源,然后他們會寫一個帶有文本輸入框的自定義XAML視圖,它能在切換到它后,輸入完成后再切換回去。
上述所說情形,可以使用ApplicationViewSwitcher::SwitchAsync 從你的全息視圖切換回XAML視圖。
應用大小 App size
2D應用視圖總是出現在一個固定的可視面板中。這使得所有2D視圖顯示同等數量的內容。下面是關於2D應用視圖大小的進一步細節:
- 調整大小時,應用的寬高比始終一樣
- 調整大小時,應用的分辨率和拉伸率都不會改變
- 應用不能查詢他們在世界中實際的大小
應用磁貼 App tiles
開始菜單使用了標准小號和中號磁貼用於pin視圖和所有應用視圖。
應用間交互 App to app interactions
當你構建應用時,Windows 10上你可以獲得豐富的應用間通信機制。即使HoloLens目前不支持最新的應用協議啟動(app service protocol launches),但是許多新的協議API和文件注冊機制在HoloLens上能夠確保應用間啟動和通信。
協議 Protocols
HoloLens通過Windows.System.Launcher APIs 支持應用間啟動。
當啟動其他應用時,以下內容要被考慮:
- 當非模態啟動時,例如LaunchUriAsync,用戶在與應用交互前必須放置好它
- 當模態啟動時,例如LaunchUriForResultsAsync,模態應用會被放置在窗口頂部
- HoloLens不能在獨占視圖(這里應該是指全息視圖?)頂部覆蓋上其他應用。為了顯示啟動的應用,HoloLens會使用會回到世界中以顯示此應用。
文件選取器 File pickers
HoloLens支持FileOpenPicker 和 FileSavePicker 合約。盡管沒有支持文件選取合約的應用被預裝,但是你可以從Windows Store下載它們 - 例如OneDrive。
如果你安裝了多個文件選取應用,你將不會看到任何有歧義的UI,這些UI通常是用來選取啟動哪個應用。取而代之的是,首個安裝的文件選取器將會被選中。保存文件時,會自動生成包括時間戳的文件名。用戶不能改變文件愛你們。
默認情況下,以下是本地支持的文件拓展格式:
應用合約和Windows Holographic擴展 App contracts and Windows Hologrphic extensions
應用合約和拓展入口允許你注冊你的應用來使用更底層的操作系統特性,例如處理文件拓展或者使用后台任務。下面是Windows Holographic支持的合約和拓展入口列表。這與它支持的API集合不同。
應用文件存儲 App File Storage
所有的存儲都是通過Windows.Storage命名空間實現。閱讀下面的內容來了解更多細節。HoloLens不支持應用存儲同步/漫游。
- 文件、文件夾和庫 Files, folders, and libraries
- 商店和檢索設置以及其他應用數據 Store and retrieve settings and other app data
已知目錄 Known folders
查看KnownFolders 來了解更多UWP應用使用KnownFolders的細節。
Property 屬性 |
Supported on HoloLens Development Edition HoloLens開發板是否支持 |
Description 描述 |
---|---|---|
AppCaptures | Yes | Gets the App Captures folder. 獲取應用捕獲文件夾 |
CameraRoll | Yes | Gets the Camera Roll folder. 相機文件夾 |
DocumentsLibrary | Yes | Gets the Documents library. The Documents library is not intended for general use. 文檔庫 |
MusicLibrary | Yes | Gets the Music library. 音樂庫 |
Objects3D | Yes | Gets the Objects 3D folder. 3D對象文件夾 |
PicturesLibrary | Yes | Gets the Pictures library. 圖片庫 |
Playlists | Yes | Gets the play lists folder. 播放列表文件夾 |
SavedPictures | Yes | Gets the Saved Pictures folder. 保存的圖片文件夾 |
VideosLibrary | Yes | Gets the Videos library. 視頻庫 |
HomeGroup | No | Gets the HomeGroup folder. 家庭組文件夾 |
MediaServerDevices | No | Gets the folder of media server (Digital Living Network Alliance (DLNA)) devices. 媒體設備文件夾 |
RecordedCalls | No | Gets the recorded calls folder. 電話錄音文件夾 |
RemovableDevices | No | Gets the removable devices folder. 可移動設備文件夾 |
應用打包 App package
使用Windows10,你不再需要以操作系統為目標但是取而代之的是,你需要以一個或多個設備家族來作為目標(target your app to one or more device families)。一個設備家族定義了此家族中所有設備都可應用的API、系統字符集和行為集合。它也決定了你的應用從應用商店中能安裝到哪系列的設備。
翻譯自:https://developer.microsoft.com/en-us/windows/holographic/app_model#App_views