电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)

前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结。

蓝牙技术联盟在2010年6月30号公布了蓝牙4.0标准,4.0标准在蓝牙3.0+HS标准的基础上增加了对低功耗蓝牙(BLE)的支持。相比原有的普通蓝牙和高速蓝牙,BLE最大的特点就是低功耗,低延时,快速的搜索和连接速度,但数据传输速度相比传统蓝牙低。接下去将从BLE的概念以及代码两个方面介绍Android下的BLE。

先来说说基本概念:

1.BLE相关概念

1.1 GATT、Service、Characteristic、DescriptorBLE开发,经常会与四个概念发生关系:GATT、Service、Characteristic、Descriptor

GATT:是蓝牙4.0特有的Profile通用规范,BLE应用的Profile均基于GATT。Gatt定义了一个服务框架规范,该框架包括对蓝牙服务(Service)和服务特性(Characteristic)的定义和规范,和其中读写、通知的特性等。可以将GATT理解成BLE框架,我们在GATT上面实现BLE功能。

Service:是完成一个特定功能的数据和行为集合。在Gatt中,一个Service可能包含Service引用以及强制或者可选的Characteristic。

Characteristic:也叫特征值,一个Characteristic的定义包含了Characteristic本身,数值以及描述(Descriptor)的声明。Characteristic是完成BLE具体功能的基本单位。

Descriptor:Descriptor定义了Characteristic中数据的具体含义。

总的来说,一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个Value和多个Descriptor,一个Descriptor包含一个Value

1.2 中央(Central)与周边(Periphery)

在BLE协议中,有两个角色,周边(Periphery)和中央(Central):

周边是数据提供者,中央是数据使用/处理者;在iOS SDK里面,可以把一个iOS设备作为一个周边,也可以作为一个中央;但是在Android SDK里面,Android手机只能作为中央来使用和处理数据;那数据从哪儿来?从BLE设备来,现在的很多可穿戴设备都是用BLE来提供数据的。

一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。

那么问题来了,如何定义周边和中央?

关于周边和中央,涉及到四个类:BluetoothGattServer:作为周边来提供数据

BluetoothGattServerCallback:返回周边的状态

BluetoothGatt:作为中央来使用和处理数据

BluetoothGattCallback:返回中央的状态和周边提供的数据。、

关系如图下:

2. 开发Ble

了解了那些基础概念后,我们就正式开始开发ble。

Ble的Android开发,主要是以下的几个步骤:1、添加权限

2、扫描Ble设备

3、连接Ble设备

4、数据通讯

那么现在,开始一步步来完成。

2.1 添加权限:

在AndroidManifest.xml中添加Ble需要的权限,其实就两个:

2.2 检查是否设备是否支持蓝牙,并打开蓝牙

检查设备是否支持蓝牙

/**

* 检查该设备是否支持蓝牙     */

public void isBle(Context context) {        //手机硬件支持蓝牙

if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

ViewUtils.getInstance().showToast("该设备不支持BLE,即将离开改页面");

}

}

打开手机蓝牙开关

private BluetoothAdapter mBluetoothAdapter;//蓝牙适配器    //打开蓝牙权限

if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, What.Bluetooth.bluetoothEnable);

}

2.3 扫描设备

开始扫描和停止扫描,只需要调用对应的startLeScan()和stopLeScan()即可,但是需要将LeScanCallBack作为参数:

// 超时时间

private static final long SCAN_PERIOD = 10000;

...    private void scanLeDevice(final boolean enable) {        if (enable) {            // 达到超时时间,停止扫描

mHandler.postDelayed(new Runnable() {

@Override                public void run() {

mScanning = false;

mBluetoothAdapter.stopLeScan(mLeScanCallback);

}

}, SCAN_PERIOD);            //开始扫描            mBluetoothAdapter.startLeScan(mLeScanCallback);

} else {            //停止扫描            mBluetoothAdapter.stopLeScan(mLeScanCallback);

}

...

}

android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...相关推荐

  1. 小米小爱蓝牙音箱_你对小米新发布的小爱蓝牙音箱随身版怎么看?

    泻药,本人目前手头的小爱产品有小爱闹钟,小爱mini还有华米智能手表 小爱闹钟我作为闹钟和卧室的语音助手使用放在床头,偶尔会听一听广播. 华米智能手表的小爱功能个人觉得,用处不是很大但是某些时候很方便 ...

  2. React Native 蓝牙4.0 BLE开发

    使用react-native-ble-plx库进行开发 安装 yarn add react-native-ble-plx // 辅助数据发送接收buffer工具类 yarn add buffer re ...

  3. java 蓝牙4.0_《蓝牙4.0 BLE开发完全手册---物联网开发技术实战

    图书目录: 第1章 蓝牙4.0 BLE简介 1.1 无线网络数据传输协议对比 1.2 短距离无线网络的分类 1.2.1 什么是蓝牙4.0 BLE 1.2.2 蓝牙4.0 BLE的特点 1.3 蓝牙4. ...

  4. iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发

    1 前言 当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy).对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持 ...

  5. android标题栏添加按钮_如何从iPhone或Android设备访问PC

    如果您不 在家中工作 ,您仍然可以远程访问办公室中的计算机. 可以在计算机之间完成此操作,也可以使用Microsoft的 远程桌面工具 从iOS或Android设备访问远程PC. 有了它,您就可以像坐 ...

  6. AndroidStudio_安卓原生开发_蓝牙扫描设备_另一种方法---Android原生开发工作笔记145

    下面的一个方法是之前写的,但是那种方法有时候会有扫描不到的情况,现在再写一种,这种方法,更简单有效一些. AndroidStudio安卓原生开发_Android扫描附近指定的蓝牙设备_通过设备名称过滤 ...

  7. Android蓝牙4.0 BLE开发坑总结

    onServicesDiscovered 回调里不能直接执行 write /readDataFromCharacteristic() 或者 enableNotificationOfCharacteri ...

  8. Android开发:IBeacon系列——安卓蓝牙4.0(BLE)开发之检测IBeacon热点初步

    检测ibeacon热点信号 软硬件要求:Android4.3及以上中支持BLE技术,同时蓝牙需要满足Bluetooth4.0及以上. iBeacon的工作原理是基于Bluetooth Low Ener ...

  9. android unity 关闭应用_在后台运行的Android Unity应用程序

    我有一个在Android上运行的Unity应用程序.它也会在应用程序放入后台时继续运行.它不使用服务在后台运行.相反,这个应用程序会创建一个新线程,并且该线程在应用程序处于后台时继续运行.在后台运行的 ...

最新文章

  1. mysql format函数对数字类型转化的坑
  2. android中webview loadUrl(String url,Map header)方法和postUrl(String url,byte[] postData)方法同时使用问题;...
  3. 计算硼原子的基态能级B---库仑排斥能
  4. 网站运营之做到SEO操作视频教程【21讲】
  5. 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概
  6. Spring Cloud--Honghu Cloud分布式微服务云系统—组件化
  7. php文件上传接口测试,七牛云存储-用php上传图片,我在本地测试,用php接口,不成功...
  8. leetcode题解677-键值映射
  9. android卡片 弹簧滑动,如何在滚动android时拉类似于弹性类型的布局?
  10. 数据库中的年月日表达
  11. 构建大型网站架构服务器集群(转)
  12. LVM卷管理及配额设置
  13. 前端书籍推荐之《精通JavaScript+jQuery》
  14. win10下安装Elasticsearch和kibana教程
  15. MTK6577+Android4.0之增加重启功能
  16. JarvisOJ Basic 握手包
  17. linux磁盘列阵和文件系统
  18. 机器学习在地球物理(地震)中的发展历程_1
  19. 吴莫愁公布恋情爱上哈林 演唱会庾澄庆单膝跪地似求婚
  20. html5网页制作电脑版,页未央HTML5制作神器PC版

热门文章

  1. 10款经典香水 怀旧十个年代-Part I
  2. oracle leg,[LEG引擎]英雄合击数据库
  3. 7.1创新Audigy2Z S 7.1声卡的设置方法
  4. 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
  5. 你知道CAD看图软件浩辰CAD看图王中的批注如何删除/保存吗?
  6. R语言-将数据按照月份、季度、年份划分及求某个代码(地名、产业名等)对应的累积值
  7. scada如何用oracle数据库,SCADA系统数据库存储功能设计及应用
  8. 玩转LInux系统02--虚拟机使用和常用操作
  9. 如何做一个搜索引擎友好的站点?
  10. java枚举报错_java枚举类