如何在Android设备上通过蓝牙与Android应用程序执行5字节数据接收?

时间:2017-01-19 11:25:20

标签: java android bluetooth

我需要在Android设备上通过蓝牙接收5个字节的帧。我发送数据框没有问题,但我不知道如何正确接收数据。我不需要接收字符串,只需要字节值。 有没有人有这样的代码? 我在Android Studio 2.2.3中编程

2 个答案:

答案 0 :(得分:1)

您必须启用符合特征的通知/指示。 写完命令后。您将从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));
  }

characteristic.getStringValue(1)//输出字节作为特定偏移的字符串 characteristic.getValue()//输出为字节数组

希望这个答案能帮到你。

振作起来

快乐编码

答案 1 :(得分:0)

您可以在官方文档中找到有关如何设置bluetooth连接的教程。 https://developer.android.com/guide/topics/connectivity/bluetooth.html