6

I am trying to write text data to my BLE device. So , i am following Android Bluetooth GATT classes to do the task. But i found writing the text to the Characteristics is fine but while trying to retrieve the Characteristics value , it returns null.

MyCode :

public void writeCharacteristic(BluetoothGattCharacteristic characteristic,
                                String text) {

    String TAGS ="MyBeacon";

    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAGS, "BluetoothAdapter not initialized");
        return;
    } else {
        Log.w(TAGS, "Writting ... ");
    }
    byte[] data = hexStringToByteArray(text);


    Log.w(TAGS, "Writting text = " + data);


    try {
        characteristic.setValue(URLEncoder.encode(text, "utf-8"));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    boolean writeValue = mBluetoothGatt.writeCharacteristic(characteristic);

    Log.w(TAGS, "Writting Status = " + writeValue);

}

// Successfully onCharacteristicWrite also gets called //

   @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);

        String TAGS ="MyBeacon";

        String text = null;
        try {
            text = new String(characteristic.getValue(), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        Log.w(TAGS, "onCharacteristicWrite = " + text+" :: "+status);

    }

but while trying to read the Characteristics it returns null.

  for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {

                final byte[] data = gattCharacteristic.getValue(); // returns null

                  if (data != null && data.length > 0) {

                     Log.d("MyBeacon", " Read Data ")

                  } else {

                     Log.d("MyBeacon", " Data is null")
                  }

      }

MyBeacon

Also check the issue in other thread too.

Please help me out , suggest me some solution to write and read data successfully to my Beacon.

4

3 に答える 3

4

構文は次のとおりです。

mBluetoothGatt.readCharacteristic(characteristic);

特性の読み取り: を使用して特性を読み取ることができます。 mBluetoothGatt.readCharacteristic(characteristic);

次のように、特性の記述子を読み取る必要があります。

mBluetoothGatt.readDescriptor(ccc);

読み取ったら、onDescriptorRead コールバックを呼び出してデータを返す必要があります。ここで、次の呼び出しによる通知または指示のいずれかを介して、特性をセットアップ (サブスクライブ) できます。

mBluetoothGatt.setCharacteristicNotification(characteristic, true)

true が返されたら、記述子に再度書き込む必要があります (通知または指示の値)。

BluetoothGattDescriptor clientConfig = characteristic.getDescriptor(CCC);
clientConfig.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

//clientConfig.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
mBluetoothGatt.writeDescriptor(clientConfig);

これが完了すると、特性が変化するたびに onCharacteristicChanged コールバックを通じて通知を受け取ります。

実装中に問題が発生した場合は、更新してください。

于 2016-03-10T07:39:51.423 に答える