2017-06-27 12 views
0

私は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に予想外のコールバックを受けていますということです。この切断再接続フェーズは、サービスが実行されている間繰り返されるため、接続は不変ではありません。私が接続しようとしているデバイスのベンダーは、接続を維持しているアプリケーションを持っていますが、私の接続はありません。理由は何でしょうか?

+0

どのデバイスに接続しようとしていますか?たぶん、デバイスは何らかの書き込みを期待しています。そうでなければ、デバイスは切断されますか? – Emil

+0

エンジン診断リーダー - 車両走行距離計、エンジン状態などを監視することを目的としています。 [link](http://wlius.com/bluelink) – Ron

+0

BLEペリフェラルは、アイドルタイムアウトを実装するのが一般的です。なぜなら、それらは小容量のバッテリで長時間持続するように設計されているからです。特性の読み込みまたは書き込みを実行するだけで、リンクを存続させることができます。どのくらい頻繁に読書をしていますか? –

答えて

0

アイドルタイムアウトがあるかもしれないことを示唆しているMark Chが正しいことが分かります。このデバイスのケースでは30秒だったので、29秒ごとに読み取りを実行するか、それ以下では切断​​ができませんでした。ちょうど彼らが文書でこれを言及していたらと思います!

関連する問題