華為近距離通信服務(Nearby Service)使用華為自研協議,應用集成Nearby Service后,即可實現智能設備之間文件的免流量高速快傳,並且集成過程簡單易懂。
隨着智能手機普及率越來越高,人們對智能手機依賴性也越來越強。常用的大多數手機應用具備文件傳輸功能,如:社交類應用(傳圖片、傳文件、傳聊天記錄等)、文件管理應用(傳文件、備份、手機克隆等)、音視頻類應用(分享歌曲、視頻等)。這幾類應用的傳輸文件功能主要是借助網盤、雲服務器將文件傳輸到另一個設備上。這類方式都需要使用用戶流量或者需要在有Wi-Fi的場景下進行傳輸,並不具備免流量面對面傳輸的能力。有一些開發者可能試圖嘗試通過藍牙或者Wi-Fi來實現近場數據傳輸,但這需要和復雜的網絡協議、硬件設備打交道,且傳輸速度不盡人意。
Nearby Service四大優點
-
輕松集成:僅2個文件傳輸API,無需和復雜的網絡協議打交道。
-
極速傳輸:最高傳輸速率可超60MB/s,1GB文件傳輸僅需20秒。
-
無需聯網:無需借助路由器或其他網絡設備,通過藍牙、Wi-Fi實現數據傳輸,不花費用戶自己的流量。
-
平台支持:支持全安卓平台(華為設備和非華為設備),其他平台將陸續開放。
Demo應用介紹(NearbyFileTransfer)
為了讓開發者更好的了解如何集成Nearby Service,這里提供了一個掃碼傳文件的Demo以供參考。NearbyFileTransfer集成了#HMS Core# Nearby Service和Scan Kit,在兩個智能設備(手機、Pad等)之間通過掃碼即可完成數據傳輸。
開發實戰
NearbyFileTransfer項目開源地址:GitHub。下面為您介紹如何根據源代碼將這個Demo運行起來,以便於您了解實現細節。
開發准備
工具准備
-
兩台華為手機(效果最佳)。
-
開發工具 Android Studio(3.X或更高版本)。
注冊成為開發者
注冊成為華為開發者。
創建一個應用
參考Nearby Service 開發准備在華為應用市場創建一個您的應用。
構建Demo應用
-
參考Nearby Service 開發准備將您的應用對應的agconnect-services.json文件下載到本地,並將其放在示例代碼的app目錄下。
-
同步工程,構建您的應用。
運行示例應用
-
將Demo應用分別安裝到測試機A和B。
-
在測試機A上選擇"Send File", 挑選需要傳輸的文件,生成二維碼
-
在測試機B上選擇"Receive File"
-
等待文件傳輸結束
關鍵代碼說明
在項目級gradle里添加華為maven倉
Android Studio項目級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.1.0.300'
implementation 'com.huawei.hms:scan:1.2.3.300'
}
請參考Nearby Service的版本更新說明,使用最新的SDK版本。
在AndroidManifest.xml文件里面聲明系統權限
該示例代碼工程需要藍牙、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是危險的系統權限,因此,您需要動態的申請這些權限,詳情請查看示例代碼中NearbyAgent.java文件中的requestPermissions函數。
關鍵代碼
文件發送和接收的關鍵代碼在 FileMainActivity.java文件中。
如果您的應用需要集成Nearby Service傳輸文件,僅僅需要參考FileMainActivity.java文件調用nearbyAgent.sendFile函數和nearbyAgent.receiveFile函數,即可實現掃碼傳文件。
1. 發送文件
發送方選擇文件后調用 **nearbyAgent.sendFile ** 准備發送文件
@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(new File(uri.getPath()));
}
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/cn/hms/huawei-nearbyservice?ha_source=hms1
• 參與開發者討論請到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
作者:胡椒