尝试创建一个BLE中央应用程序以与外围设备通信。
我正在使用此处提供的BluetoothLeService应用https://developer.android.com/guide/topics/connectivity/bluetooth-le.html
要创建外围设备,我使用的是Android APP https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner。
我能够阅读并获得有关特性变化的通知,我修改了BluetoothLeService以使用BluetoothGatt的writeCharacteristic更新特征。
使用的设备:
外设:Redmi Note 4(启用所有权限(读,写,通知))
用作核心的设备:
LGE Nexus 5X(Android 7.1.2,API 25)
LGE Nexus 4(Android 5.1.1,API 22)
Android Studio: 版本2.3.3 gradle文件: android { compileSdkVersion 25 buildToolsVersion“25.0.3”
defaultConfig {
minSdkVersion 18
targetSdkVersion 25
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
main {
dirs.each { dir ->
java.srcDirs "src/${dir}/java"
res.srcDirs "src/${dir}/res"
}
}
androidTest.setRoot('tests')
androidTest.java.srcDirs = ['tests/src']
}
}
代码:
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status) {
Log.w("Tharun", "onServicesDiscovered received: " + status);
setStatus(status);
broadcastUpdate(WRITE_DATA);
}
};
public void writeCharacteristic(BluetoothGattCharacteristic characteristic, String
writeString) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
characteristic.setValue(writeString);
boolean result = mBluetoothGatt.writeCharacteristic(characteristic);
Log.w(TAG, "writeCharacteristic result : " + result);
}
问题:
当我在上述设备上执行代码时,writeCharacteristic返回false。即使是onCharacteristicWrite也不会被调用。
但是当我将android studio以调试模式附加到App并添加一个断点(只有在有一些断点时,如果没有断点它不起作用)写入成功发生并且onCharacteristicWrite正在运行
我无法弄清问题是什么。
我试图通过该函数的代码来查看为什么它返回false,但无法找到任何内容。
非常感谢任何帮助。
答案 0 :(得分:0)
我确保没有GATT操作还没有完成。我最初的怀疑是android-studio运行源代码与我设备上的代码不同。因此,在调试模式下运行的代码与仅在设备上运行的代码不同。 事实证明这是真的。我创建了一个新项目(使用api 22和android 5.1.1)复制了所有代码。现在工作正常。