我正在开发一个Android项目,通过BLE链接连接Nexus 7和生物传感器。问题是,我可以成功检测并获取传感器的服务和特征列表。当我将一些数据写入特定特征时,会自动调用onCharacteristicWrite
并向我显示写入操作是否成功。但是,传感器从未从平板电脑接收任何东西。如果我在iPhone上使用类似的应用程序,一切正常。所以设备没有问题。
有没有人知道这个问题?
这是我写的代码:
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
mConnected = true;
Log.i(TAG, "Connected to GATT server.");
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:" +
mBluetoothGatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
mConnected = false;
Log.i(TAG, "Disconnected from GATT server.");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
//Once detected services, write to characteristic for 6 times.
int count =6;
while(count>0){
writeCharacteristic();
count--;
}
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status){
if (status == BluetoothGatt.GATT_SUCCESS){
Log.d(TAG,"Write to Characteristic Success! !");
}
}
};
public boolean writeCharacteristic(){
//check mBluetoothGatt is available
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return false;
}
BluetoothGattService Service = mBluetoothGatt.getService(UUID_MY_SERVICE);
if (Service == null) {
Log.e(TAG, "service not found!");
return false;
}
BluetoothGattCharacteristic characteristic = Service
.getCharacteristic(UUID_MY_CHARACTERISTIC);
if (characteristic == null) {
Log.e(TAG, "char not found!");
return false;
}
byte[] value = {(byte)300,(byte)100,(byte)100};
characteristic.setValue(value);
boolean status = mBluetoothGatt.writeCharacteristic(characteristic);
return status;
}
输出显示"写入特征成功! !"六次,因此写作操作成功。但是,该设备显示没有从平板电脑收到任何内容。我还尝试一次写一个字节,或者添加一个计时器让平板电脑每隔2秒写入传感器。但它们都没有奏效。有任何想法吗?
答案 0 :(得分:2)
(通过问题编辑回答。转换为社区维基回答。请参阅What is the appropriate action when the answer to a question is added to the question itself?)
OP写道:跟进:
通过首先在设置中手动将平板电脑与设备配对而不是通过代码配对来解决问题。
因此,仅使用Android提供的连接Gatt的代码片段并不足以配对设备。如果我不想每次都手动配对,我应该添加我在网上找到的另一个代码来配对设备:
private void pairDevice(BluetoothDevice device) { try { Log.d("pairDevice()", "Start Pairing..."); Method m = device.getClass() .getMethod("createBond", (Class[]) null); m.invoke(device, (Object[]) null); Log.d("pairDevice()", "Pairing finished."); } catch (Exception e) { Log.e("pairDevice()", e.getMessage()); } }