Jame
Jame

Reputation: 3854

Is the procedure correct to write Characteristic in Bluetooth Low Energy?

I have a button in MainActivity which is used to write a byte[] to BLE device:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Write Char"
    android:id="@+id/button2"
    android:onClick="onClickWrite" />

And the function onClickWrite is

public void onClickWrite(View v){
    if(mBluetoothLeService != null) {
       byte [] data= new byte[3];
       data[0] = (byte)(0 & 0xFF);
       data[1] = (byte)(255 & 0xFF);
       data[2] = (byte)(0 & 0xFF);
       mBluetoothLeService.sendData(data);
    }
}

where sendData is a modified function in class [BluetoothLeService][1]. It worked well when I press the button. However, Let is careful to look at the sendData function. It searches service and Characteristic again when I press the button. Is it correct procedure for write a Characteristic in BLE?

public void sendData(byte[] data){
    String lService = "00001c00-d102-11e1-9b23-00025b00a5A5";
    String lCharacteristic = "00001c03-d102-11e1-9b23-00025b00a5a5";
    BluetoothGattService mBluetoothLeService = null;
    BluetoothGattCharacteristic mBluetoothGattCharacteristic = null;

    for (BluetoothGattService service : mBluetoothGatt.getServices()) {
        if ((service == null) || (service.getUuid() == null)) {

            Log.d("TAG","Something is null");
            continue;
        }
        if (lService.equalsIgnoreCase(service.getUuid().toString())) {

            Log.d("TAG","service.getUuid().toString()="+service.getUuid().toString());
            mBluetoothLeService = service;
        }
    }
    if(mBluetoothLeService!=null) {
        mBluetoothGattCharacteristic =
                mBluetoothLeService.getCharacteristic(UUID.fromString(lRgbCharacteristic));
    }
    else{
        Log.d("TAG","mBluetoothLeService is null");
    }

    if(mBluetoothGattCharacteristic!=null) {
        mBluetoothGattCharacteristic.setValue(data);

        boolean write = mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic);

        Log.d("TAG","writeCharacteristic:"+write);
    }
    else{
        Log.d("TAG", "mBluetoothGattCharacteristic is null");
    }
}

Upvotes: 0

Views: 428

Answers (1)

Bogdan Alexandru
Bogdan Alexandru

Reputation: 5552

Yes.

(filling unnecessarily required length)

Upvotes: 1

Related Questions