HoloLens開發(fā)教程:Windows Device Portal Wrapper

Jyadmin 提交于 周一, 01/06/2020 - 13:25

?

什么是Windows Device Portal Wrapper?

顧名思義,WDP Wrapper是對Windows Device Portal REST APIs進行通用封裝而開發(fā)的C#客戶端SDK。這種官方標準化SDK的開源發(fā)布,極大地方便了C#開發(fā)者,也體現(xiàn)了Microsoft為開源生態(tài)而做出的努力。

WDP Wrapper支持.Net 4.5.2以上的平臺及UWP平臺,.Net 3.5等其他平臺暫不支持。如圖1所示,您可以通過Nuget在您的Visual Studio工程中引入WindowsDevicePortalWrapper,也可以在Github的release中下載最新的版本,在您的VS工程中添加引用。

WdpClient開發(fā)介紹

在WdpClient的VS工程中引入WDP Wrapper后,您可以在WdpClient的代碼中調(diào)用Wrapper的相關(guān)API。Device Portal Wrapper的基礎(chǔ)對象為DevicePortal,它提供了連接目標設(shè)備的服務(wù),你可以創(chuàng)建DevicePortal實例以調(diào)用在目標設(shè)備上運行的Device Portal REST API。

1創(chuàng)建DevicePoral對象

DevicePortal對象通過DevicePortalConnection對象初始化,通過address、username、password參數(shù)來建立與目標設(shè)備的連接,其中address為完整的目標設(shè)備地址,如“https://192.168.1.23”; username和password為登陸您目標設(shè)備的Device Portal的用戶名密碼。具體創(chuàng)建DevicePortal實例的代碼如下:

創(chuàng)建DevicePoral對象

2設(shè)置連接狀態(tài)回調(diào)函數(shù)

DevicePortal實例通過其內(nèi)置的ConnectionStatus來獲取連接狀態(tài)。ConnectionStatus是一個事件回調(diào)函數(shù)DeviceConnectionStatusEventHandler,其接收DevicePortal實例和DeviceConnectionStatusEventArgs作為參數(shù),在DeviceConnectionStatusEventArgs中將包含對連接狀態(tài)的反饋信息。ConnectionStatus需要在建立連接之前設(shè)置其回調(diào)函數(shù),設(shè)置樣例代碼如下:

設(shè)置連接狀態(tài)回調(diào)函數(shù)

3連接設(shè)備

如果需要允許非可信連接進行訪問,需要調(diào)用DevicePortal的GetRootDeviceCertifacateAsync方法,將acceptUntrustedCerts設(shè)置為true;若需要使用證書進行訪問,請設(shè)置證書。連接設(shè)備的調(diào)用代碼如下,請務(wù)必加上try catch。

設(shè)備連接成功后,您可以使用DevicePortal實例調(diào)用Wrapper中的API了,以下通過幾個示例來進行展示。

連接設(shè)備

4 API樣例:關(guān)機和重啟

可以通過DevicePortal實例觸發(fā)設(shè)備的關(guān)機和重啟操作,具體調(diào)用代碼如下:

API樣例:關(guān)機和重啟

5 API樣例:獲取設(shè)備上已安裝的應(yīng)用

通過DevicePortal實例,可以獲取設(shè)備上已安裝的應(yīng)用,具體調(diào)用代碼如下:

API樣例:獲取設(shè)備上已安裝的應(yīng)用

6 API樣例:通過WebSocket訪問設(shè)備

DevicePortal的部分API通過WebSocket進行連接,如需要獲取系統(tǒng)狀態(tài)或進程信息,您可以使用相關(guān)接口接收設(shè)備推送的WebSocket數(shù)據(jù)。WebSocket使用一個回調(diào)函數(shù)來定義接收到設(shè)備返回數(shù)據(jù)后的相關(guān)操作,下面的代碼展示了如何打印出設(shè)備上內(nèi)存消耗最大的應(yīng)用:

API樣例:通過WebSocket訪問設(shè)備

也可以使用其他語言,如Golang、Java等來實現(xiàn)不同的Wrapper。