我需要在Android设备上通过蓝牙接收5个字节的帧。我没有发送数据帧的问题,但我不知道如何正确接收它。我不需要接收字符串,只需接收字节值。
有人有类似的代码吗?
我在Android Studio 2.2.3中编程
最佳答案
您必须启用有关特性的通知/指示。
编写命令后。您将以字节为单位从GATT获得回调。
1)扫描设备
2)与设备连接
device.connectGatt(mContext, autoConnect,BluetoothGattCallback, BluetoothDevice.TRANSPORT_LE);
BluetoothGattCallback-回调
在此回调中,您具有多个继承的方法。为了您的目的使用此
继承此方法,以从外围设备获取字节。
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
throw new RuntimeException("Stub!");
}
3)您必须根据外围设备要求启用指示/通知。
//对于启用指示-并指定参数作为特征。
private static final UUID CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR_UUID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
public final boolean enableIndications(final BluetoothGattCharacteristic characteristic) {
Log.d("CheckData", "enableIndications");
final BluetoothGatt gatt = mBluetoothGatt;
if (gatt == null || characteristic == null)
return false;
// Check characteristic property
final int properties = characteristic.getProperties();
if ((properties & BluetoothGattCharacteristic.PROPERTY_INDICATE) == 0)
return false;
gatt.setCharacteristicNotification(characteristic, true);
final BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR_UUID);
if (descriptor != null) {
descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
return gatt.writeDescriptor(descriptor);
}
return false;
}
//对于启用Notifciation-并提供您的参数作为特征。
protected final boolean enableNotifications(final BluetoothGattCharacteristic characteristic, boolean enable) {
final BluetoothGatt gatt = mBluetoothGatt;
if (gatt == null || characteristic == null)
return false;
// Check characteristic property
final int properties = characteristic.getProperties();
if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) == 0)
return false;
gatt.setCharacteristicNotification(characteristic, enable);
final BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR_UUID);
if (descriptor != null) {
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
return gatt.writeDescriptor(descriptor);
}
return false;
}
4)根据您所尊重的特征写下价值观。
5)响应将来到您注册的回调BluetoothGattCallback
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
characteristic.getStringValue(1) // Output Bytes
characteristic.getValue() // Output as Byte Array
Log.d("Values", characteristic.getStringValue(1));
}
Characteristics.getStringValue(1)//从特定偏移量将字节输出为字符串
Characteristics.getValue()//输出为字节数组
希望这个答案对您有帮助。
振作起来投票
快乐编码