華為近距離通信服務(Nearby Service)使用華為自研協議,應用集成Nearby Service后,即可實現智能設備之間文件的免流量高速快傳,並且集成過程簡單易懂。
隨着智能手機普及率越來越高,人們對智能手機依賴性也越來越強。常用的大多數手機應用具備文件傳輸功能,如:社交類應用(傳圖片、傳文件、傳聊天記錄等)、文件管理應用(傳文件、備份、手機克隆等)、音視頻類應用(分享歌曲、視頻等)。這幾類應用的傳輸文件功能主要是借助網盤、雲服務器將文件傳輸到另一個設備上。這類方式都需要使用用戶流量或者需要在有Wi-Fi的場景下進行傳輸,並不具備免流量面對面傳輸的能力。有一些開發者可能試圖嘗試通過藍牙或者Wi-Fi來實現近場數據傳輸,但這需要和復雜的網絡協議、硬件設備打交道,且傳輸速度不盡人意。
Nearby Service四大優點
-
輕松集成:僅2個文件傳輸API,無需和復雜的網絡協議打交道。
-
極速傳輸:最高傳輸速率可超60M/秒,1GB文件傳輸僅需20秒。
-
無需聯網:無需借助路由器或其他網絡設備,通過藍牙、Wi-Fi實現數據傳輸,不花費用戶自己的流量。
-
平台支持:支持全安卓平台(華為設備和非華為設備),其他平台將陸續開放。
Demo應用介紹(NearbyTransfer)
為了讓開發者更好的了解如何集成Nearby Service,這里提供了一個掃碼傳文件的Demo以供參考。NearbyTransfer集成了#HMS Core# Nearby Service和Scan Kit,在兩個智能設備(手機、Pad等)之間通過掃碼即可完成數據傳輸。
開發實戰
NearbyTransfer 開源項目的Github鏈接:
https://github.com/HMS-Core/hms-nearby-demo/tree/master/NearbySimpleconnection
下面為您介紹如何根據源代碼將這個Demo運行起來,以便於您了解實現細節。
開發准備
工具准備
-
兩台華為手機(效果最佳)
-
開發工具 Android Studio(3.X or later)
注冊成為開發者
創建一個應用
參考Nearby Service 開發准備在華為應用市場創建一個您的應用。
構建Demo應用
-
導入源代碼到Android Studio(3.X or later)
-
將華為應用市場上新建應用的agconnect-services.json文件下載到本地,並將其放在示例代碼的app目錄下(\app)。
運行示例應用
-
將Demo應用安裝到測試機A,B
-
在測試機A上選擇"Send File", 挑選需要傳輸的文件,生成二維碼
-
在測試機B上選擇"Receive File"
-
等待文件傳輸結束
關鍵代碼說明
在項目級gradle里添加華為maven倉
AndroidStudio項目級build.gradle文件,增量添加如下maven地址:
buildscript {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}}
在應用級的build.gradle里面加上SDK依賴
dependencies {
implementation 'com.huawei.hms:nearby:5.0.2.300'
implementation 'com.huawei.hms:scan:1.2.3.300'
}
在AndroidManifest.xml文件里面聲明系統權限
因Nearby Service是基於藍牙、Wi-Fi、存儲等能力實現,這里需要聲明藍牙、Wi-Fi、存儲以及位置信息權限。(待增加掃碼權限)
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--相機權限-->
<uses-permission android:name="android.permission.CAMERA" />
由於ACCESS_FINE_LOCATION,WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE是危險的系統權限,因此,您需要動態的申請這些權限。如果權限不足,Nearby Service將會拒絕為您的應用開啟廣播或者掃描。
關鍵代碼
主要代碼路徑:com\huawei\hms\simpleNearbyDemo\MainActivity.java
如果您的應用需要集成Nearby Service傳輸文件,僅僅需要參考MainActivity將nearbyAgent.sendFile()和nearbyAgent.receiveFile()集成到您的應用中,即可實現掃碼傳文件。
1. 發送文件
發送方選擇文件后調用 nearbyAgent.sendFile(uri) 准備發送文件
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case FILE_SELECT_CODE:
if (resultCode == RESULT_OK) {
// Get the Uri of the selected file
Uri uri = data.getData();
nearbyAgent.sendFile(uri);
}
break;
case NearbyAgent.REQUEST_CODE_SCAN_ONE:
nearbyAgent.onScanResult(data);
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
2. 接收文件
接收方調用 nearbyAgent.onScanResult(data) 接收文件
recvBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nearbyAgent.receiveFile();
}
});
欲了解更多詳情,請參閱:
華為開發者聯盟官網:https://developer.huawei.com/consumer/en/hms/huawei-pushkit
參與開發者討論請到Reddit社區:
https://www.reddit.com/r/HuaweiDevelopers/
下載demo和示例代碼請到Github:https://github.com/HMS-Core
解決集成問題請到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
原文鏈接:
https://developer.huawei.com/consumer/cn/forum/topicview?tid=0203382449995050417&fid=18
作者:胡椒