Android ble开发详解

本文详细介绍了Android平台上的BLE(蓝牙低功耗)开发,包括BLE相关术语、Android BLE API的使用,以及设备连接、数据读写和接收的步骤。通过对BluetoothAdapter、BluetoothDevice、BluetoothGatt等关键类的解析,阐述了如何实现与BLE设备的有效通信,强调了数据读写操作的串行性质以及设置通知属性的重要性。
摘要由CSDN通过智能技术生成

前段时间,项目要接入一个ble硬件,以前也没接触过ble开发,在查阅不少资料和踩了不少坑才完成任务,因此打算写一个简单的ble开发步骤,希望能帮助到初次接触ble开发的同学。

BLE相关术语简介

GATT:GATT 的全名是 Generic Attribute Profile(姑且翻译成:普通属性协议),它定义两个 BLE 设备通过叫做 Service 和 Characteristic 的东西进行通信。

Profile:Profile 并不是实际存在于 BLE 外设上的,它只是一个被 Bluetooth SIG 或者外设设计者预先定义的 Service 的集合。

Service:Service 是把数据分成一个个的独立逻辑项,它包含一个或者多个 Characteristic。每个 Service 有一个 UUID 唯一标识。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通过认证的,需要花钱购买,128 bit 是自定义的,这个就可以自己随便设置。

Characteristic:在 GATT 事务中的最低界别的是 Characteristic,Characteristic 是最小的逻辑数据单元,与 Service 类似,每个 Characteristic 用 16 bit 或者 128 bit 的 UUID 唯一标识。在 Android 开发中,建立蓝牙连接后,通过蓝牙发送数据给外围设备就是往这些 Characteristic 中的 Value 字段写入数据;外围设备发送数据给手机就是监听这些 Charateristic 中的 Value 字段有没有变化,如果发生了变化,手机的 BLE API 就会收到一个监听的回调。
下面是一张来自官网的结构图
这里写图片描述

更多关于BLE GATT介绍可查看以下链接
BLE GATT介绍
GATT PROFILE 介绍

Android BLE开发相关API介绍

BluetoothAdapter
BluetoothAdapter 拥有基本的蓝牙操作,例如开启蓝牙扫描,使用已知的 MAC 地址 (BluetoothAdapter#getRemoteDevice)实例化一个 BluetoothDevice 用于连接蓝牙设备的操作等等。

BluetoothDevice
代表一个远程蓝牙设备。这个类可以连接所代表的蓝牙设备或者获取一些有关它的信息,例如它的名字,地址和绑定状态等等。

BluetoothGatt
这个类提供了 Bluetooth GATT 的基本功能。例如重新连接蓝牙设备,发现蓝牙设备的 Service 、读写ble设备等等。

BluetoothGattService
对应前文所介绍的Service,通过 BluetoothGatt.getService 获得,通过这个类的 getCharacteristic(UUID uuid) 进一步获取 Characteristic 实现蓝牙数据的双向传输。

BluetoothGattCharacteristic
对应前文提到的 Characteristic。对ble设备的读写主要通过这个类来完成,也是我们主要打交道的类。

BLE设备接入开发

权限

<uses-permission android:name="android.permission.BLUETOOTH"/>  
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>  

连接设备

//先去获取BluetoothAdapter
 private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

//检查手机蓝牙开关、是否支持ble
 private void checkBluetooth() {
        //是否支持蓝牙功能
        if (mBluetoothAdapter == null) {
            return;
        }
        //是否支持BLE
        if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            Toast.makeText(mContext, "不支持BLE功能", Toast.LENGTH_SHORT).show();
            return;
        }
        //是否打开蓝牙开关
        if (!mBluetoothAdapter.isEnabled()) {
            Toast.makeText(mContext, "请打开蓝牙开关", Toast.LENGTH_SHORT).show();
            return;
        }

        //搜索设备
        scanBleDevice(true);
    }
   /**
     * 搜索ble设备
     * @param enable 开始搜索或停止搜索
     */
    private void scanBleDevice(final boolean enable) {
        if (enable) {
            //开始搜索设备,搜索到设备会执行回调接口mLeScanCallback
            mBluetoothAdapter.startLeScan(mLeScanCallback);
            isScanning = true;
            //搜索设备十分耗电,应该避免长时间搜索,这里设置10s超时停止搜索
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    scanBleDevice(false);
                    Toast.makeText(mContext, "搜索超时,请重试", Toast.LENGTH_SHORT).show();
                }
            }, 10 * 1000);
        } else {
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
            isScanning = false;
        }
    }
 /**
     * 设备搜索回调
     */
    private BluetoothAdapter.LeScanCallback mLeScanCallback =
            new BluetoothAdapter.LeScanCallback() {
                @Override
                public void onLeScan(final BluetoothDevice device, 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值