我正在尝试发送一个由" 1234567
"组成的字符串。但不幸的是,我发送它的唯一方法是为每个ASCII字符添加多个延迟,有什么办法可以让代码更有效率吗?
这是我发送字符串的部分:
public void onServiceConnected(ComponentName componentName, IBinder service) {
mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
mBluetoothLeService.writeCustomCharacteristic(49);
final Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(50);
}
},100);
final Handler handler1 = new Handler();
handler1.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(51);
}
},100);
final Handler handler2 = new Handler();
handler2.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(52);
}
},100);
final Handler handler3 = new Handler();
handler3.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(53);
}
},100);
final Handler handler4 = new Handler();
handler4.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(54);
}
},100);
final Handler handler5 = new Handler();
handler5.postDelayed(new Runnable(){
@Override
public void run() {
mBluetoothLeService.writeCustomCharacteristic(55);
}
},100);
}
这是我的writeCustomCharacteristic
功能:
public void writeCustomCharacteristic(int value) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
/*check if the service is available on the device*/
BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e"));
if(mCustomService == null){
Log.w(TAG, "Custom BLE Service not found");
return;
}
/*get the read characteristic from the service*/
BluetoothGattCharacteristic mWriteCharacteristic = mCustomService.getCharacteristic(UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e"));
mWriteCharacteristic.setValue(value, BluetoothGattCharacteristic.FORMAT_SINT8,0);
if(mBluetoothGatt.writeCharacteristic(mWriteCharacteristic) == false){
Log.w(TAG, "Failed to write characteristic");
}
}
答案 0 :(得分:0)
重新定义您的writeCustomCharacteristic
方法:
public void writeCustomCharacteristic(byte[] payload) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
/*check if the service is available on the device*/
BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e"));
if(mCustomService == null){
Log.w(TAG, "Custom BLE Service not found");
return;
}
/*get the read characteristic from the service*/
BluetoothGattCharacteristic mWriteCharacteristic = mCustomService.getCharacteristic(UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e"));
mWriteCharacteristic.setValue(payload);
if(mBluetoothGatt.writeCharacteristic(mWriteCharacteristic) == false){
Log.w(TAG, "Failed to write characteristic");
}
}
并使用以下命令调用此函数:
writeCustomCharacteristic("1234567".getBytes());
顺便说一句:等待方法不是BLE通信的最佳方式。因为您不确切知道传输需要多长时间。而且你没有得到你的传输真正成功的反馈。最好等到BLE堆栈调用onCharacteristicWrite
中的BluetoothGattCallback
回调。有关Android BLE及其陷阱的更多信息,我会recommend this video。