Android BLE writeCharacteristic

1.  writeCharacteristic的基本步骤

在Android中,使用BluetoothGatt类的writeCharacteristic(BluetoothGattCharacteristic characteristic)方法向BLE设备写入数据是一个异步过程,涉及多个步骤。

以下是这些步骤的概述:

1.1.1. 获取BluetoothGatt和BluetoothGattCharacteristic对象

首先,要有一个BluetoothGatt对象,它代表了与BLE设备的连接。同时,还需要一个BluetoothGattCharacteristic 对象,它代表想要写入数据的BLE特征。这些对象通常是在BLE连接和服务发现过程中获得的。

1.1.2. 准备要写入的数据

确定想要写入BLE设备的数据,并将其存储在字节数组(byte[])中。

1.1.3. 设置BluetoothGattCharacteristic的值

使用BluetoothGattCharacteristic对象的setValue(byte[] value)方法,将准备的数据设置为该特征的值。

byte[] data = ...; // 你的数据字节数组 characteristic.setValue(data);

1.1.4. (可选)设置写入类型

虽然writeCharacteristic方法本身不接受写入类型作为参数,但某些BLE特征可能支持不同类型的写入操作(如WRITE_TYPE_NO_RESPONSE)。然而,这种写入类型通常是通过直接调用BluetoothGatt的其他方法(如writeCharacteristic的变种或requestMtu后使用更大的MTU)来隐含地处理的,或者是由BLE设备的服务定义和特征属性决定的。

1.1.5. 调用writeCharacteristic方法

调用BluetoothGatt对象的writeCharacteristic(BluetoothGattCharacteristic characteristic) 方法来请求写入操作。

boolean status = bluetoothGatt.writeCharacteristic(characteristic);

注意,这个调用只是将写入请求放入BLE堆栈的队列中。它本身并不保证数据已经被写入设备,也不提供关于操作是否成功的即时反馈。

1.1.6. 处理写入结果

要确定写入操作是否成功,你需要实现BluetoothGattCallback的onCharacteristicWrite回调方法。当BLE堆栈完成写入操作时,系统会调用此方法,并将结果作为参数传递。

bluetoothGatt.setCallback(new BluetoothGattCallback() {  
    @Override  
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {  
        if (status == BluetoothGatt.GATT_SUCCESS) {  
            // 数据写入成功  
        } else {  
            // 数据写入失败  
        }  
    }  
    // 实现其他需要的回调方法  
});

1.1.7. 确保设备连接和服务发现已完成

在尝试写入数据之前,确保BLE设备已经连接,并且已经发现了包含想要写入数据的特征的服务。

1.1.8. 处理连接状态变化和错误

BLE通信可能会因为各种原因而失败,如设备断开连接、服务或特征不存在、写入权限不足等。你应该在BluetoothGattCallback中实现其他回调方法(如onConnectionStateChange、onServicesDiscovered、onCharacteristicRead等)来处理这些情况。

1.1.9. 清理资源

在不再需要BLE连接时,请确保释放相关资源,如关闭GATT连接和断开与BLE设备的连接。

2.示例

以下是一个简化的示例,展示了如何在Android应用中向BLE设备的特征写入数据:

// 假设已经有了BluetoothGatt的实例bluetoothGatt  
// 和BluetoothGattCharacteristic的实例characteristic  
  
// 设置要写入的数据  
byte[] data = ...; // 你的数据字节数组  
characteristic.setValue(data);  
  
// 设置写入类型(如果需要的话,默认为WRITE_TYPE_DEFAULT)  
// 可能的值包括:BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT, WRITE_TYPE_NO_RESPONSE, WRITE_TYPE_SIGNED  
// 注意:并非所有设备都支持WRITE_TYPE_NO_RESPONSE或WRITE_TYPE_SIGNED  
int writeType = BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT;  
// 如果你的设备支持无响应写入,并且你希望使用它,可以设置为  
// int writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE;  
  
// 执行写入操作  
boolean success = bluetoothGatt.writeCharacteristic(characteristic);  
  
// 注意:writeCharacteristic 方法本身并不保证数据已经被写入设备  
// 它只是将写入请求排队到BLE堆栈中。实际的数据写入是异步的  
// 你需要通过BluetoothGattCallback的onCharacteristicWrite回调来接收写入结果  
  
// 设置BluetoothGattCallback来处理BLE事件  
bluetoothGatt.setCallback(new BluetoothGattCallback() {  
    @Override  
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {  
        super.onCharacteristicWrite(gatt, characteristic, status);  
        if (status == BluetoothGatt.GATT_SUCCESS) {  
            // 数据写入成功  
            // 执行后续操作  
        } else {  
            // 数据写入失败  
            // 处理错误情况  
        }  
    }  
  
    //还可以实现其他回调方法来处理BLE连接、断开、发现服务、发现特征等事件  
});  
  
// 不要忘记在适当的时候使能BLE通知或指示(如果特征支持的话)  
// 并在写入操作之前确保设备已连接并且服务已发现

3.流程图

  • 26
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android BLE(Bluetooth Low Energy)通讯是一种低功耗蓝牙通信技术,用于设备之间的数据传输。下面是一个Android BLE通讯的实例。 首先,确保你的Android设备支持BLE,并在AndroidManifest.xml文件中添加必要的权限和特征声明。 在你的Android应用程序中,首先要获取一个BluetoothManager实例,并从中获取BluetoothAdapter实例。然后,使用BluetoothAdapter实例来扫描附近的BLE设备。这可以通过调用startLeScan()方法和注册一个BluetoothAdapter.LeScanCallback来完成。在回调方法中,你可以获取到扫描结果,并根据需要处理它们。 当你找到目标设备后,停止扫描并连接该设备。你可以使用BluetoothDevice实例的connectGatt()方法来建立与该设备的GATT(Generic Attribute Profile)连接。连接成功后,你可以通过BluetoothGatt实例执行各种GATT操作,例如读取和写入特征值,或者设置通知。 例如,要读取设备的特定特征值,你可以调用BluetoothGatt的readCharacteristic()方法,并在回调方法中处理结果。要写入设备的特征值,使用writeCharacteristic()方法,并传入要写入的值。要设置通知,使用setCharacteristicNotification()方法,并在回调方法中处理通知事件。 最后,当你完成BLE通讯时,记得关闭GATT连接并释放相关资源。通过调用BluetoothGatt的disconnect()和close()方法来完成这些操作。 这只是一个简单的Android BLE通讯实例,具体实现可能因应用需求而不同。在实际应用中,你可能还需要处理GATT连接的状态变化、特征值的解析等其他操作。希望这个简单的实例能够帮助你理解Android BLE通讯的基本操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值