Я работаю над проектом Android, который должен подключить Nexus 7 и биосенсор через ссылку BLE. Проблема в том, что я могу успешно обнаружить и получить список сервисов и характеристик датчика. Когда я записываю некоторые данные в конкретную характеристику, автоматически вызывается 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 секунды. Но ни один из них не работал. Любые идеи?