2017-06-19 28 views
1

RxAndroidBle 1.3.1を使用してAndroidからBLEデバイスに接続しています。特定の携帯電話(現在私はLG V20 [LG-H918]、Android 7.0でこれを見ています)では、私たちのアプリが切断された後、電話はユーザーの入力なしで引き続き接続します。Android BLEは切断後にバックグラウンドで接続します

アプリを閉じると、デバイスの接続が切断されます。その後、私たちのアプリプロセスを終了させることができます。 20秒ほど後に、電話機は約2秒間デバイスに再接続して切断されます。電話機を再起動するまで、この動作は10〜20秒ごとに無限に繰り返されます。

実際には、接続がまだ存在している間にアプリケーションを強制終了すると、定期的な接続を取得することさえあります。私たちが切断すると

これらは、ログです:

06-21 10:51:07.464 26640-26640/com.hatchbaby.rest.qa I/Nightlight: [main] Disconnecting: Nightlight.disconnect() 
06-21 10:51:07.528 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: setCharacteristicNotification() - uuid: 02240003-5efd-47eb-9c1a-de53f7a2b232 enable: false 
06-21 10:51:07.538 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.539 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.543 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: setCharacteristicNotification() - uuid: 02260002-5efd-47eb-9c1a-de53f7a2b232 enable: false 
06-21 10:51:07.547 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.548 26640-26640/com.hatchbaby.rest.qa D/RxBle#Radio: QUEUED RxBleRadioOperationDisconnect(160892126) 
06-21 10:51:07.562 26640-26640/com.hatchbaby.rest.qa I/Nightlight: [main] Nightlight state: RxBleConnectionState{DISCONNECTED} 
06-21 10:51:07.686 26640-26747/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onDescriptorWrite descriptor=00002902-0000-1000-8000-00805f9b34fb status=0 
06-21 10:51:07.688 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDescriptorWrite(131621266) 
06-21 10:51:07.689 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.783 26640-26746/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onDescriptorWrite descriptor=00002902-0000-1000-8000-00805f9b34fb status=0 
06-21 10:51:07.786 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDescriptorWrite(250764313) 
06-21 10:51:07.787 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: STARTED RxBleRadioOperationDisconnect(160892126) 
06-21 10:51:07.787 26640-26640/com.hatchbaby.rest.qa D/BluetoothManager: getConnectionState() 
06-21 10:51:07.787 26640-26640/com.hatchbaby.rest.qa D/BluetoothManager: getConnectedDevices 
06-21 10:51:07.793 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: cancelOpen() - device: E5:D6:FC:68:FB:55 
06-21 10:51:07.797 26640-26653/com.hatchbaby.rest.qa D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=E5:D6:FC:68:FB:55 
06-21 10:51:07.797 26640-26653/com.hatchbaby.rest.qa D/RxBle#BluetoothGatt: onConnectionStateChange newState=0 status=0 
06-21 10:51:07.803 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: close() 
06-21 10:51:07.803 26640-26640/com.hatchbaby.rest.qa D/BluetoothGatt: unregisterApp() - mClientIf=6 
06-21 10:51:07.807 26640-26690/com.hatchbaby.rest.qa D/RxBle#Radio: FINISHED RxBleRadioOperationDisconnect(160892126) 

私は困惑しています。どんな助けもありがとう!

+0

アプリケーションからコードとログを表示できますか? –

+0

Androidのバグのようです。 – Emil

+0

投稿はログで編集されます。コードが長すぎると関与しますが、切断するとObservable にすべてのサブスクリプションを登録解除します。 –

答えて

0

犯人はSpotifyは接続しています。接続されていないBluetoothデバイスを監視し、すぐに接続しようとします。場合によっては無限ループに移行することもありますが、結局接続サイクルが停止することがあります。しかし、私たちはSCを止めることでこの壊滅的な行動を取り除くことができ、それを他の電話機にインストールすることでそれを実現することができました。

関連項目Android BLE unexpectedly and repeatedly reconnects to peripheral

0

アプリからGATTプロファイルを接続するときは、自動BLE用のAndroid documentationからfalseに設定されたフラグ接続していることを確認してください: - GATT ServerにBLE と対話するための最初のステップを接続する

をデバイスに接続しています。具体的には、デバイス上のGATT サーバに接続しています。 BLEデバイス上のGATTサーバーに接続するには、 connectGatt()メソッドを使用します。 コンテキストオブジェクト、自動接続(ブール自動的にすぐに利用できる なるとBLEデバイスに接続 するか否かを示す)、及びBluetoothGattCallbackを参照:この方法は、3つのパラメータをとり

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

+0

BluetoothGattオブジェクトのdisconnect()を適切に呼び出すと、 autoConnectをtrueまたはfalseに設定します。 – Emil

+0

@Emil:私は、リモート側のスタックの潜在的なバグを指摘していました - OPのアプリケーションで自動接続によって引き起こされた - それを排除したいので、 – Zakir

+0

Autoconnectはfalseです。上記のように、RxAndroidBleでは 'disconnect()'を直接呼び出すことはありません。代わりに、その接続に登録されているRx Observablesから退会してください。 –

0

closeメソッドが呼び出されていることを確認してください。

close method

+0

私はRxAndroidBleライブラリを使用しています。あなたは実際に 'close()'を呼んでいないので、その接続と関係があるObservableからすべて退会します。実際には、ログの切断無線操作が表示されるので、正しく切断されているように見えます。 –

関連する問題