android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...
电子秤蓝牙双模通讯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开发(上)...相关推荐
- 小米小爱蓝牙音箱_你对小米新发布的小爱蓝牙音箱随身版怎么看?
泻药,本人目前手头的小爱产品有小爱闹钟,小爱mini还有华米智能手表 小爱闹钟我作为闹钟和卧室的语音助手使用放在床头,偶尔会听一听广播. 华米智能手表的小爱功能个人觉得,用处不是很大但是某些时候很方便 ...
- React Native 蓝牙4.0 BLE开发
使用react-native-ble-plx库进行开发 安装 yarn add react-native-ble-plx // 辅助数据发送接收buffer工具类 yarn add buffer re ...
- 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. ...
- iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发
1 前言 当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy).对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持 ...
- android标题栏添加按钮_如何从iPhone或Android设备访问PC
如果您不 在家中工作 ,您仍然可以远程访问办公室中的计算机. 可以在计算机之间完成此操作,也可以使用Microsoft的 远程桌面工具 从iOS或Android设备访问远程PC. 有了它,您就可以像坐 ...
- AndroidStudio_安卓原生开发_蓝牙扫描设备_另一种方法---Android原生开发工作笔记145
下面的一个方法是之前写的,但是那种方法有时候会有扫描不到的情况,现在再写一种,这种方法,更简单有效一些. AndroidStudio安卓原生开发_Android扫描附近指定的蓝牙设备_通过设备名称过滤 ...
- Android蓝牙4.0 BLE开发坑总结
onServicesDiscovered 回调里不能直接执行 write /readDataFromCharacteristic() 或者 enableNotificationOfCharacteri ...
- Android开发:IBeacon系列——安卓蓝牙4.0(BLE)开发之检测IBeacon热点初步
检测ibeacon热点信号 软硬件要求:Android4.3及以上中支持BLE技术,同时蓝牙需要满足Bluetooth4.0及以上. iBeacon的工作原理是基于Bluetooth Low Ener ...
- android unity 关闭应用_在后台运行的Android Unity应用程序
我有一个在Android上运行的Unity应用程序.它也会在应用程序放入后台时继续运行.它不使用服务在后台运行.相反,这个应用程序会创建一个新线程,并且该线程在应用程序处于后台时继续运行.在后台运行的 ...
最新文章
- mysql format函数对数字类型转化的坑
- android中webview loadUrl(String url,Map header)方法和postUrl(String url,byte[] postData)方法同时使用问题;...
- 计算硼原子的基态能级B---库仑排斥能
- 网站运营之做到SEO操作视频教程【21讲】
- 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概
- Spring Cloud--Honghu Cloud分布式微服务云系统—组件化
- php文件上传接口测试,七牛云存储-用php上传图片,我在本地测试,用php接口,不成功...
- leetcode题解677-键值映射
- android卡片 弹簧滑动,如何在滚动android时拉类似于弹性类型的布局?
- 数据库中的年月日表达
- 构建大型网站架构服务器集群(转)
- LVM卷管理及配额设置
- 前端书籍推荐之《精通JavaScript+jQuery》
- win10下安装Elasticsearch和kibana教程
- MTK6577+Android4.0之增加重启功能
- JarvisOJ Basic 握手包
- linux磁盘列阵和文件系统
- 机器学习在地球物理(地震)中的发展历程_1
- 吴莫愁公布恋情爱上哈林 演唱会庾澄庆单膝跪地似求婚
- html5网页制作电脑版,页未央HTML5制作神器PC版
热门文章
- 10款经典香水 怀旧十个年代-Part I
- oracle leg,[LEG引擎]英雄合击数据库
- 7.1创新Audigy2Z S 7.1声卡的设置方法
- 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
- 你知道CAD看图软件浩辰CAD看图王中的批注如何删除/保存吗?
- R语言-将数据按照月份、季度、年份划分及求某个代码(地名、产业名等)对应的累积值
- scada如何用oracle数据库,SCADA系统数据库存储功能设计及应用
- 玩转LInux系统02--虚拟机使用和常用操作
- 如何做一个搜索引擎友好的站点?
- java枚举报错_java枚举类