Nexus 7とバイオセンサーをBLEリンクで接続するAndroidプロジェクトに取り組んでいます。問題は、センサーのサービスと特性のリストを正常に検出して取得できることです。特定の特性にデータを書き込むと、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;
}
出力には「Write to Characteristic Success!!」と表示されます。6回、書き込み操作が成功しました。ただし、デバイスはタブレットから何も受信していないことを示しています。また、一度に 1 バイトずつ書き込むか、タイマーを追加して、タブレットが 2 秒ごとにセンサーに書き込むようにしました。しかし、どれも機能しませんでした。何か案は?