教你如何集成HMS Nearby Service 实现安卓设备间文件的高速、免流量传输

<u>华为近距离通信服务</u>(Nearby Service)使用华为自研协议,应用集成Nearby Service后,即可实现安卓设备之间文件的免流量高速快传,并且集成过程简单易懂。

随着智能手机普及率越来越高,人们对智能手机依赖性也越来越强。常用的大多数手机应用具备文件传输功能,如:社交类应用(传图片、传文件、传聊天记录等)、文件管理应用(传文件、备份、手机克隆等)、音视频类应用(分享歌曲、视频等)。这几类应用的传输文件功能主要是借助网盘、云服务器将文件传输到另一个设备上。这类方式都需要使用用户流量或者需要在有Wi-Fi的场景下进行传输,并不具备免流量面对面传输的能力。有一些开发者可能试图尝试通过蓝牙或者Wi-Fi来实现近场数据传输,但这需要和复杂的网络协议、硬件设备打交道,且传输速度不尽人意。

Nearby Service****四大优点

  1. 轻松集成:仅2个文件传输API,无需和复杂的网络协议打交道。

  2. 极速传输:最高传输速率可超60M/秒,1GB文件传输仅需20秒。

  3. 无需联网:无需借助路由器或其他网络设备,通过蓝牙、Wi-Fi实现数据传输,不花费用户自己的流量。

  4. 平台支持:支持全安卓平台(华为设备和非华为设备),其他平台将陆续开放。

Demo****应用介绍(NearbyTransfer)

为了让开发者更好的了解如何集成Nearby Service,这里提供了一个扫码传文件的Demo以供参考。NearbyTransfer集成了#HMS Core# Nearby Service和Scan Kit,在两个安卓设备(手机、Pad等)之间通过扫码即可完成数据传输。

开发实战

NearbyTransfer项目开源地址:<u>GitHub</u>。下面为您介绍如何根据源代码将这个Demo运行起来,以便于您了解实现细节。

开发准备

工具准备

  1. 两台华为手机(效果最佳)
  2. 开发工具 Android Studio(3.X or later)

注册成为开发者

注册成为<u>华为开发者</u>。

创建一个应用

参考<u>Nearby Service 开发准备</u>在华为应用市场创建一个您的应用。

构建Demo应用

  • 导入源代码到Android Studio(3.X or later)
  • 将华为应用市场上新建应用的agconnect-services.json文件下载到本地,并将其放在示例代码的app目录下(\app)。

运行示例应用

  1. 将Demo应用安装到测试机A,B
  2. 在测试机A上选择"Send File", 挑选需要传输的文件,生成二维码
  3. 在测试机B上选择"Receive File"
  4. 等待文件传输结束

详细操作请参考视频。

https://www.bilibili.com/video/BV1nT4y1F7UU/

关键代码说明

在项目级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

获取开发指导文档:

https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/service-introduction-0000001050040060

参与开发者讨论请到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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351