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

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

?

什么是Windows Device Portal Wrapper?

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

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

WdpClient開(kāi)發(fā)介紹

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

1創(chuàng)建DevicePoral對(duì)象

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

創(chuàng)建DevicePoral對(duì)象

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

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

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

3連接設(shè)備

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

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

連接設(shè)備

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

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

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

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

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

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

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

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

API樣例:通過(guò)WebSocket訪問(wèn)設(shè)備

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