本文主要讲解Android低功耗蓝牙的api使用以及蓝牙扫描、连接、发送数据、接收数据等一系列操作,本篇结尾有本人封装的BleLib蓝牙库,非常适合蓝牙初学者使用,只需要一行代码注入就OK了,而且用法也极其简单,我会在第二篇中专门讲解一下BleLib库的使用。

在BLE协议中,有两个角色,周边(Periphery)和中央(Central);周边是数据提供者,中央是数据使用/处理者,一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。
首先使用蓝牙就不得不说BluetoothGatt和BluetoothGattCallback这两个类,该类继承自BluetoothProfile,BluetoothGatt作为中央来使用和处理数据,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallback,BluetoothGattCallback返回中央的状态和周边提供的数据。

我们蓝牙操作的主要目的就是为了拿到中央BluetoothGatt这个对象,进而进行接下来的所有一系列操作,如下:
1.先拿到BluetoothManager:bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

2.再拿到BluetoothAdapt:btAdapter = bluetoothManager.getAdapter();

3.开始扫描:btAdapter.startLeScan( BluetoothAdapter.LeScanCallback);

4.从LeScanCallback中得到BluetoothDevice:public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {…..}

5.用BluetoothDevice得到BluetoothGatt:gatt = device.connectGatt(this, true, gattCallback);

这时总算拿到中央BluetoothGatt了,它有很多的方法,调用这些方法,你就可以通过BluetoothGattCallback和周边BluetoothGattServer交互了。

下面讲解一下主要类的大致理解:

BluetoothProfile: 一个通用的规范,按照这个规范来收发数据。

BluetoothManager:通过BluetoothManager来获取BluetoothAdapter
如:BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

BluetoothAdapter:一个Android系统只有一个BluetoothAdapter ,通过BluetoothManager 获取
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

BluetoothGattDescriptor:可以看成是描述符,对Characteristic的描述,包括范围、计量单位等。

BluetoothGattService:服务,Characteristic的集合。

BluetoothGattCallback:已经连接上设备,对设备的某些操作后返回的结果。这里必须提醒下,已经连接上设备后的才可以返回,没有返回的认真看看有没有连接上设备。
private BluetoothGattCallback GattCallback = new BluetoothGattCallback() {
// 这里有9个要实现的方法,看情况要实现那些,用到那些就实现那些
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState){};
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){};
};
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
BluetoothGatt gatt = device.connectGatt(this, false, mGattCallback);

蓝牙交互的主要对应关系:
1、notification对应onCharacteristicChanged;
gatt.setCharacteristicNotification(characteristic, true);该方法一般是在发现服务后,进行设置的,设置该方法的目的是让硬件在数据改变的时候,发送数据给app,app则通过onCharacteristicChanged方法回调给用户,从参数中可获取到回调回来的数据。

2、readCharacteristic对应onCharacteristicRead;
gatt.readCharacteristic(characteristic);

3、writeCharacteristic对应onCharacteristicWrite;
gatt.wirteCharacteristic(mCurrentcharacteristic);

4、连接蓝牙或者断开蓝牙 对应 onConnectionStateChange;

5、 readDescriptor对应onDescriptorRead;

6、writeDescriptor对应onDescriptorWrite;

gatt.writeDescriptor(descriptor);

7、readRemoteRssi对应onReadRemoteRssi;
gatt.readRemoteRssi()

8、executeReliableWrite对应onReliableWriteCompleted;

9、discoverServices对应onServicesDiscovered
gatt.discoverServices()

开启蓝牙所具备的权限:

如果 android.hardware.bluetooth_le设置为false,可以安装在不支持的设备上使用,判断是否支持蓝牙4.0用以下代码就可以了
如:if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, “设备不支持蓝牙4.0”, Toast.LENGTH_SHORT).show();
finish();
}

对蓝牙的启动关闭操作:
1、利用系统默认开启蓝牙对话框
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
2、后台打开蓝牙,不做任何提示,这个也可以用来自定义打开蓝牙对话框啦
mBluetoothAdapter.enable();
3、后台关闭蓝牙
mBluetoothAdapter.disable();

本文的api介绍:(blelibrary库)
1、iQppCallback和QppApi这个两个类封装了完整的读写数据,设置通知等操作 此demo中并未用到这两个接口,此列出方便以后调用
2、BleDevice类为蓝牙对象,其中可以设置蓝牙的基本属性,以及连接状态等(可以继承该类进行扩展)
3、BleConfig类中主要是放置一些静态值,如连接超时时长、扫描时长、服务及特征的uuid,以及验证硬件发送的广播包以便进行过滤扫描到的设备
4、BleLisenter包含了ble蓝牙操作的所有接口 如开始扫描、停止扫描、扫描到设备、获取到服务、读取硬件返回的数据、向硬件写入数据、设置通知、蓝牙连接改变、蓝牙连接出错(在四此处设置同时最多可连接多少设备)等回调
5、BluetoothLeService实现所有的上述回调方法

本文先粗略的讲解一下android中api的大致使用及含义。
下篇将重点讲解BleLib库的使用以及各方法的具体使用。

使用:见DEMO
demo下载地址:https://github.com/liulei-0911/BleDemo
androidstudio依赖地址: compile ‘cn.com.superLei:blelibrary:1.0.0’

android BLE蓝牙详细讲解(一)相关推荐

  1. Android BLE蓝牙详细解读

    代码地址如下: http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能 ...

  2. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)

    上篇文章主要介绍了关于BLE的一些基础操作,我们能够大概了解到蓝牙操作的一些流程,上文末介绍了本人的一个BLE开源库,支持蓝牙一对多的连接方式,该库封装了蓝牙的开启.扫描.连接.断开.连接超时...一 ...

  3. Android BLE蓝牙开发知识总结

    Android BLE蓝牙开发知识总结 1.蓝牙介绍 1.1什么是蓝牙?    蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换(使用2 ...

  4. Android BLE蓝牙踩坑总结

    简介 自从Android-BLE库开源了一段时间以来,越来越多的小伙伴问到了各种各样的关于BLE的奇怪问题,在这里我想跟大家分享一下本人对于Android BLE蓝牙的一些看法和解决方式,避免刚接触的 ...

  5. Android Ble蓝牙开发总结

    Android Ble蓝牙开发总结 前言 本文总结了ble的搜索,连接,读写操作.以及在开发过程中可能遇到的坑. 首先我们需要知道,什么是ble. 蓝牙发展至今经历了8个版本的更新.1.1.1.2.2 ...

  6. Android蓝牙BLE的详细讲解

    我今天分享的主题是 Android 上低功耗蓝牙的实践.这个主题比较小众.我在过去的一年多的时间里,主要是在做低功耗蓝牙相关的开发.接触过程中发现,BLE 的开发和通常的 Android APP 的开 ...

  7. Android BLE 蓝牙开发指南(三)外围设备端开发详解

    Android BLE开发指南(一)入门基础 Android BLE开发指南(二)中心设备端程序开发详解 这篇文章将会详细讲解低功耗蓝牙外围设备端程序开发的主要流程.对于Android开发者而言,或许 ...

  8. android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2

    Android蓝牙4.0 Ble读写数据详解 -2 上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑. 先介绍一款调试工具,专门调试Ble蓝牙的app.名字叫:nRF-Con ...

  9. Android BLE蓝牙4.0开发 实现扫描、连接、通讯、获取通知、特性等 (一、打开蓝牙 进行扫描)

    目录 首先说下蓝牙4.0 目前android蓝牙有2种: ble蓝牙开发流程: 1.首先当然是进行权限申请啦: 2.获取蓝牙适配器 BluetoothAdapter 3.打开蓝牙 4.关闭蓝牙 5.在 ...

最新文章

  1. 使用Leangoo做销售管理体系
  2. Mac使用nginx+rtmp服务器
  3. RansomCoin 二进制中提取加密货币地址
  4. python到底怎么学-学 Python 到底能帮你解决什么问题 ?
  5. python有序队列_【python】collections模块(有序字典,计数器,双向队列)
  6. 数据结构——树的简单操作集合
  7. 在生产中运行Java:SRE的观点
  8. 为什么直接ping知乎的ip不能访问知乎的网站,而百度就可以?
  9. php代码里怎么写html代码_菜鸟青铜变白银!Python 项目代码写完了,然后怎么打包和发布?...
  10. 纪中2016.10.6比赛不明总结
  11. ubuntu系统4G卡上网操作图解
  12. VUE day_08(7.26)学子商城项目详细版
  13. eNsp 多区域OSPF配置
  14. Android adb shell启动应用程序的方法
  15. x86 android 显卡 tablet2,随心而变 ThinkPad Tablet 2评测
  16. Jvm sandbox mock机制实践
  17. linux SVN安装及配置图解教程
  18. 搞定机器学习面试,这些是基础!(下载PDF)
  19. 亚运赛场阿联酋公主亲自上阵 爱骑超千万
  20. 基于卷积神经网络的口罩佩戴识别与检测

热门文章

  1. vue-layer,在vue中的layer插件
  2. 【Rust指南】use关键字妙用|模块内容拆分
  3. web自动化测试之Selenium
  4. Excel VBA中如何支持复数计算?
  5. 阿里云安装mysql
  6. 随机分组工具(工具)
  7. Unity Cocos2D-x之间的战火硝烟
  8. SPSS R插件及PS Matching插件最详细简洁的安装经验
  9. 线程池概念、线程池作用、线程池的四种创建方式
  10. WPS:修改了“正文”的模板样式。