Working with BLE Android 4.3 how to write characteristics?

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

I am working on a BLE project (Android application) using Android 4.3 API, i have used sample BLE app it is only reading characteristics in DeviceControlActivity.activity, but i want to write characteristics and send it to BLE chip on clicking a button. How can I write data on chip cc2540 .. Basically i don't know the step by step procedure to write characteristics.

write i can only see the name and id of device with following piece of code in DeviceControlActivity

 private final ExpandableListView.OnChildClickListener servicesListClickListner =         new ExpandableListView.OnChildClickListener() {             @Override             public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,                                         int childPosition, long id) {                 if (mGattCharacteristics != null) {                     final BluetoothGattCharacteristic characteristic =                             mGattCharacteristics.get(groupPosition).get(childPosition);                     final int charaProp = characteristic.getProperties();                     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) {                         // If there is an active notification on a characteristic, clear                         // it first so it doesn't update the data field on the user interface.                         if (mNotifyCharacteristic != null) {                             mBluetoothLeService.setCharacteristicNotification(                                     mNotifyCharacteristic, false);                             mNotifyCharacteristic = null;                         }                         mBluetoothLeService.readCharacteristic(characteristic);                         showDialog("reading");                     }                      if ((charaProp | BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) {                         // If there is an active notification on a characteristic, clear                         // it first so it doesn't update the data field on the user interface.                         if (mNotifyCharacteristic != null) {                             mBluetoothLeService.setCharacteristicNotification(                                     mNotifyCharacteristic, false);                             mNotifyCharacteristic = null;                         }                         mBluetoothLeService.writeCharacteristic(characteristic);                         showDialog("writing");                         //characteristic.setValue(bytes);                         //characteristic.setValue("testing");                         //characteristic.setWriteType(BluetoothGattCharacteristic.PERMISSION_WRITE);                     }                     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {                         mNotifyCharacteristic = characteristic;                         mBluetoothLeService.setCharacteristicNotification(                                 characteristic, true);                     }                      byte[] value = {0x00, (byte) (0xB9) , 0x0D, (byte) (0x90), 0x2F};                     if(!characteristic.setValue(value))                      {                         Log.w(TAG, "Couldn't set characteristic's local value");                          //return;                     }                      characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);                     /*if(!writeCharacteristic.writeCharacteristic(characteristic))                     {                          Log.w(TAG, "Couldn't write characteristic");                     }*/                      return true;                 }                 return false;             } }; 

回答1:

The following code is write characteristic using byte[] data:

    public boolean writeCharacteristic(){      //check mBluetoothGatt is available     if (mBluetoothGatt == null) {         Log.e(TAG, "lost connection");         return false;     }     BluetoothGattService Service = mBluetoothGatt.getService(your Services);     if (Service == null) {         Log.e(TAG, "service not found!");         return false;     }     BluetoothGattCharacteristic charac = Service             .getCharacteristic(your characteristic);     if (charac == null) {         Log.e(TAG, "char not found!");         return false;     }      byte[] value = new byte[1];     value[0] = (byte) (21 & 0xFF);     charac.setValue(value);     boolean status = mBluetoothGatt.writeCharacteristic(charac);     return status; } 


回答2:

Please note that the logic OR in:
if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0)" in the original post should be a logic AND for the permission check to work. Same for the second charaProp comparison. Otherwise bot statements are true regardless of the actual permission flag.



回答3:

The following code is write characteristic using string data in utf-8 format:

public void writeCharacteristic(BluetoothGattCharacteristic characteristic,             String data) {         if (mBluetoothAdapter == null || mBluetoothGatt == null) {             Log.w(TAG, "BluetoothAdapter not initialized");             return;         }          Log.i(TAG, "characteristic " + characteristic.toString());         try {             Log.i(TAG, "data " + URLEncoder.encode(data, "utf-8"));              characteristic.setValue(URLEncoder.encode(data, "utf-8"));              // TODO             mBluetoothGatt.writeCharacteristic(characteristic);         } catch (UnsupportedEncodingException e) {             e.printStackTrace();         }     } 

Hope it helps!



回答4:

public boolean writeCharacteristic(byte value[],int type){     //check mBluetoothGatt is available     if (mBluetoothGatt == null) {         Log.e(TAG, "lost connection");         return false;     }     BluetoothGattService Service = mBluetoothGatt.getService(UUID_SIMPLESERVICE);     if (Service == null) {         Log.e(TAG, "service not found!");         //////////NO service found...........          return false;     }     BluetoothGattCharacteristic charac1 = null;     boolean status1 = false;      if(type==1) {         charac1 = Service.getCharacteristic(UUID_PORT1);         charac1.setValue(value);         status1 = mBluetoothGatt.writeCharacteristic(charac1);         Log.v("________BLESERVICE____", "___WRITE CHARATERISTICS STATUS:_________"+status1);         onReliableWriteCompleted(status1);     }     if (charac1 == null) {         Log.e(TAG, "char not found!");         return false;     }      Log.v("___TYPE___","______________________"+type);     return status1; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!