私はAndroid's BLE apisのデバイスに接続しようとしています。スキャン、接続、読み取りは問題ありませんが、問題は正確に30秒後に接続が解除され、一時的に再接続するだけです(< 10秒)。ここでは、デバイスのGATTサーバーに接続するための私のコードは次のとおりです。Android BLEデバイスは、30秒ごとに絶えず接続を解除して再接続します。
protected BluetoothGatt initGattServer(BluetoothDevice device, final ConnectionCallback callback, final DataCallback dataCallback) {
Log.d("INIT GATT SERVER", device.getName());
this.gatt = device.connectGatt(context, true, new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState){
Log.d("GATT CONNECTION", "CHANGED -- status: " + status + " newState: " + newState);
if(callback != null){
callback.onConnectionStateChanged(newState);
}
gattConnectionState = newState;
if(status == BluetoothGatt.GATT_SUCCESS){
if(newState == BluetoothProfile.STATE_CONNECTED){
gatt.discoverServices();
}
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status){
gattServices.clear();
gattServices.addAll(gatt.getServices());
callback.onServicesDiscovered(gatt);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
handleCharacteristicChanged(characteristic, status, dataCallback);
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
handleCharacteristicChanged(characteristic, status, dataCallback);
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){
handleCharacteristicChanged(characteristic, BluetoothGatt.GATT_SUCCESS, dataCallback);
}
});
refreshDeviceCache(gatt);
return this.gatt;
}
問題は、私がBluetoothProfile.STATE_CONNECTED続いBluetoothProfile.STATE_DISCONNECTED、とonConnectionStateChangeに予想外のコールバックを受けていますということです。この切断再接続フェーズは、サービスが実行されている間繰り返されるため、接続は不変ではありません。私が接続しようとしているデバイスのベンダーは、接続を維持しているアプリケーションを持っていますが、私の接続はありません。理由は何でしょうか?
どのデバイスに接続しようとしていますか?たぶん、デバイスは何らかの書き込みを期待しています。そうでなければ、デバイスは切断されますか? – Emil
エンジン診断リーダー - 車両走行距離計、エンジン状態などを監視することを目的としています。 [link](http://wlius.com/bluelink) – Ron
BLEペリフェラルは、アイドルタイムアウトを実装するのが一般的です。なぜなら、それらは小容量のバッテリで長時間持続するように設計されているからです。特性の読み込みまたは書き込みを実行するだけで、リンクを存続させることができます。どのくらい頻繁に読書をしていますか? –