Android蓝牙4.0BLE通讯读写数据更新

本文介绍了一个Android应用与蓝牙设备进行BLE通信的需求,包括如何建立连接、搜索服务、读写数据以及实现心跳机制来监测连接状态。开发者通过连接connectGatt,监听onConnectionStateChange和onServicesDiscovered事件,然后读取和写入数据,使用定时任务确保数据连续写入以验证连接稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需求:app和蓝牙通讯,并且能接收到硬件按键通过蓝牙发送来的消息,app做对应操作,有点类似于蓝牙耳机接听,挂断。
蓝牙开发以前接触的少,经典蓝牙开发做过android bt,BLE做的少,所以一直不太懂,最近项目又用到BLE蓝牙,所以把项目的一些代码简单整理下,主要是蓝牙连接,读写数据,蓝牙消息监听。蓝牙搜索的代码我这里就不写了,大家可以自己百度下。
为了能监测到app和蓝牙一直连接,并且连接正常,代码中用了一直往蓝牙写数据作为心跳来判断连接是否正常,大概逻辑是:
连接connectGatt–>连接成功onConnectionStateChange–>搜索服务discoverServices–>搜索服务成功回调onServicesDiscovered–>读数据readCharacteristic–>读数据回调onCharacteristicRead–>写入数据writeCharacteristic(开一个线程定时10秒去写一次数据,一直写,写入失败说明蓝牙断开或异常)
官方API:
BLE

//根据蓝牙mac地址获取writeCharacteristic
BluetoothDevice bluetoothDevice =BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddress);

蓝牙连接

  mBluetoothGatt = mDevice.connectGatt(mContext, false, new BluetoothGattCallback() {

            /**
             * 蓝牙连接状态回调
             * @param gatt
             * @param status
             * @param newState
             */
            @Override
            public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
                if (status == BluetoothGatt.GATT_SUCCESS) {
  
  //获取GATT服务成功
                    if (newState == BluetoothProfile.STATE_CONNECTED) {
                        Log.e(TAG, "蓝牙连接功...status=STATE_CONNECTED"+gatt.getDevice().getName())
                        // 连接成功,开始搜索服务,一定要调用此方法,否则获取不到服务
                        mBluetoothGatt.discoverServices(); 
                    } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                        Log.e(TAG, "蓝牙连接断开...status=STATE_DISCONNECTED");
                    }
                } else {  //断开重连
                    Log.e(TAG, "蓝牙连接断开...status=" + status );      
                }
            }

            /**
             * 当远程设备的远程服务、特性和描述符列表已被更新时调用,即已发现新服务。
             * @param gatt
             * @param status
             */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值