如何用HMS Nearby Service給自己的App新增近距離資料傳輸功能
阿新 • • 發佈:2020-07-13
當你給朋友傳送手機資料時,過了很久進度條卻動也不動;當你想傳送大檔案給同事時,僅一個檔案就用光了你所有流量;當你跟朋友乘坐飛機時想一起玩遊戲時,卻因沒有網路無奈放棄。
![](https://img2020.cnblogs.com/blog/1969374/202007/1969374-20200713102422260-368868673.jpg)
們生活中似乎經常能遇到這種尷尬的場景,近距離資料傳輸功能是使用者的一個痛點。現在,只需要接入華為近距離通訊服務,通過Nearby Connection便可以輕鬆實現裝置間的資料傳輸,傳輸型別支援短文字、流資料和檔案資料等型別,可幫助app實現本地多人遊戲、實時協作、多屏遊戲和離線檔案傳輸等功能。下圖是功能演示:
![](https://img2020.cnblogs.com/blog/1969374/202007/1969374-20200713102436182-1297096810.gif)
如果你對實現方式感興趣,可以在Github上下載原始碼:
[https://github.com/HMS-Core/hms-nearby-demo/tree/master/NearbyConnection](https://github.com/HMS-Core/hms-nearby-demo/tree/master/NearbyConnection)
首先需要了解Nearby Connection 開發流程
![](https://img2020.cnblogs.com/blog/1969374/202007/1969374-20200713102451074-1606070105.png)
# 1. 業務流程
整體流程可以劃分為4個階段。
**廣播掃描階段**:廣播端啟動廣播,發現端啟動掃描以發現廣播端。
1. 廣播端呼叫startBroadcasting()啟動廣播。
2. 發現端呼叫startScan()啟動掃描以發現附近的裝置。
3. 由onFound()方法通知掃描結果。
**建立連線階段**:發現端發起連線並啟動對稱的身份驗證流程,雙端獨立接受或拒絕連線請求。
1. 發現端呼叫requestConnect()向廣播端發起連線請求。
2. 兩端由onEstablish()通知連線啟動後,均可以呼叫acceptConnect()接受連線或呼叫rejectConnect()拒絕連線。
3. 兩端由onResult()通知連線結果。僅當兩端都接受連線時,連線才能建立。
**傳輸資料階段**:建立連線後,雙端進行資料交換。
1. 連線建立後,雙端均可以呼叫sendData()傳送資料給對端。
2. 接收資料的一端由onReceived()通知接收到資料;兩端由onTransferUpdate()通知當前的傳輸狀態。
**斷開連線階段**:雙端任意一端發起斷開連線,通知對端連線斷開。
1. 主動斷開連線的一端呼叫disconnect()斷開連線,對端由onDisconnected()通知連線斷開。
# 2. 開發步驟
## 2.1 開發準備
如果你以前沒有整合華為移動服務的經驗,那麼需要先配置AppGallery Connect,開通近距離通訊服務並整合HMS SDK。相關步驟請參考官方文件。
## 2.2 宣告系統許可權
Nearby Connection開發場景需要使用Nearby Discovery API和Nearby Transfer API,你的應用必須根據所使用的策略宣告適當的許可權。例如:使用POLICY_STAR策略開發檔案傳輸的應用,需要新增特定的許可權到AndroidManifest.xml: