Android se reconnecte de façon inattendue et répétée à périphérique

je développe une application Android qui se connecte avec un appareil BLE et j'ai récemment rencontré un comportement étrange: lorsque l'application se déconnecte de l'appareil, quelques secondes plus tard, quelque chose d'autre semble établir la connexion.

je suis en train de caractériser la question plus complètement et j'ai été concentré sur la carte Bluetooth et les profils PBAP; ils apparaissent dans les journaux autour du point de la question. Je ne suis pas sûr, cependant, si c'est la cause profonde, ni ai trouvé un contournement.

l'application supporte L'API 23-25. À ce jour, j'ai seulement éprouvé le problème dans les téléphones avec des cartes SIM présents, qui pointe à nouveau à PBAP puisque de nombreux téléphones semblent soutenir ce profil seulement avec une carte SIM. Je n'ai pas encore été en mesure de reproduire sur API 23, mais pour l'instant ces téléphones de test n'ont pas de cartes SIM.

le dispositif BLE n'a rien à voir avec l'application automobile, et il n'a pas non plus la capacité de traiter les Contacts ou la messagerie. Je n'ai pas activé intentionnellement l'un ou l'autre de ces éléments dans l'application. De plus, il n'y a pas d'appariement / liaison entre mon application et l'appareil, et l'appareil ne supporte pas l'appariement / liaison.

dans la plupart des cas, la tentative de reconnexion se produit Une fois, quelques secondes après la déconnexion de l'appareil via l'application. Les séquences connect-disconnect subséquentes de l'application ont le même comportement. Cependant, j'ai vu dans au moins un cas où les reconnects (en dehors de l'application) se poursuivent indéfiniment deuxième.

La seule chose qui semble résoudre le problème à court terme est de cycle Bluetooth sur le téléphone, ou force-arrêter le processus de partage Bluetooth. Je ne crois pas que les reconnects reviennent d'eux-mêmes, mais il est courant qu'ils réapparaissent une fois que l'utilisateur se connecte-déconnecte avec l'appareil via mon application.

Je ne suis pas très familier avec le PBAP / MAP alors je ne sais pas comment ils sont activés ou, si possible, comment les désactiver. Je ne suis pas sûr si elles sont le coupable, mais ils apparaissent dans les journaux au moment de la reconnexion.

Voici les instructions du journal de bord autour du point de déconnexion et de reconnexion subséquente. Le nom de l'interface ici est "Foo04" avec MAC = B0:B4:48:E8:FA:04.

03-31 14:27:44.305 D/RxBle#Radio(14105):  STARTED RxBleRadioOperationDisconnect(186827491)
03-31 14:27:44.319 D/BluetoothManager(14105): getConnectionState()
03-31 14:27:44.320 D/BluetoothManager(14105): getConnectedDevices
03-31 14:27:44.332 D/BluetoothGatt(14105): cancelOpen() - device: B0:B4:48:E8:FA:04
03-31 14:27:44.334 D/BtGatt.GattService(13168): clientDisconnect() - address=B0:B4:48:E8:FA:04, connId=5
03-31 14:27:44.339 E/bt_btif (13168): bta_gattc_mark_bg_conn unable to find the bg connection mask for: b0:b4:48:e8:fa:04
03-31 14:27:44.340 D/BtGatt.GattService(13168): onDisconnected() - clientIf=5, connId=5, address=B0:B4:48:E8:FA:04
03-31 14:27:44.341 D/BluetoothGatt(14105): onClientConnectionState() - status=0 clientIf=5 device=B0:B4:48:E8:FA:04
03-31 14:27:44.342 D/RxBle#BluetoothGatt(14105): onConnectionStateChange newState=0 status=0
03-31 14:27:44.345 D/RxBle#Radio(14105): FINISHED RxBleRadioOperationDisconnect(186827491)
03-31 14:27:44.352 D/BluetoothGatt(14105): close()
03-31 14:27:44.352 D/BluetoothGatt(14105): unregisterApp() - mClientIf=5
03-31 14:27:44.354 D/BtGatt.GattService(13168): unregisterClient() - clientIf=5
03-31 14:27:45.376 W/bt_l2cap(13168): l2cble_process_conn_update_evt: Error status: 22
03-31 14:27:45.377 W/bt_btif (13168): bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0016
03-31 14:27:45.377 W/bt_btif (13168): bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0016
03-31 14:27:45.377 I/bt_btm_sec(13168): btm_sec_disconnected clearing pending flag handle:13 reason:22
03-31 14:27:45.381 E/BluetoothRemoteDevices(13168): state12newState1
03-31 14:27:45.393 D/BluetoothMapService(13168): onReceive
03-31 14:27:45.393 D/BluetoothMapService(13168): onReceive: android.bluetooth.device.action.ACL_DISCONNECTED
03-31 14:27:45.402 D/BluetoothPbapReceiver(13168): PbapReceiver onReceive action = 
03-31 14:27:45.404 D/BluetoothPbapReceiver(13168): Calling start service with action = null
03-31 14:27:45.405 I/TrustAgent.Tracker(15208): [BluetoothConnectionTracker] Bluetooth disconnect broadast for Foo04 B0:B4:48:E8:FA:04
03-31 14:27:46.407 W/bt_smp  (13168): smp_br_connect_callback is called on unexpected transport 2
03-31 14:27:46.408 W/bt_btif (13168): bta_dm_acl_change info: 0x0
03-31 14:27:46.408 I/bt_bta_dm(13168): bta_dm_gatt_disc_result service_id_uuid_len=2 
03-31 14:27:46.408 I/bt_bta_dm(13168): bta_dm_gatt_disc_result service_id_uuid_len=2 
03-31 14:27:46.408 D/bt_btif_dm(13168): remote version info [b0:b4:48:e8:fa:04]: 0, 0, 0
03-31 14:27:46.408 I/bt_bta_dm(13168): bta_dm_gatt_disc_result service_id_uuid_len=2 
03-31 14:27:46.408 I/bt_bta_dm(13168): bta_dm_gatt_disc_result service_id_uuid_len=16 
03-31 14:27:46.408 I/bt_bta_dm(13168): bta_dm_gatt_disc_result service_id_uuid_len=2 
03-31 14:27:46.412 E/BluetoothRemoteDevices(13168): state12newState0
03-31 14:27:46.457 I/TrustAgent.Tracker(15208): [BluetoothConnectionTracker] Bluetooth connect broadast for Foo04 B0:B4:48:E8:FA:04
03-31 14:27:47.317 I/WCNSS_FILTER(13194): ibs_msm_serial_clock_vote: vote UART CLK OFF using UART driver's ioctl()
03-31 14:27:48.421 I/WCNSS_FILTER(13194): ibs_msm_serial_clock_vote: vote UART CLK ON using UART driver's ioctl()
03-31 14:27:48.483 W/bt_btif (13168): bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0016
03-31 14:27:48.483 W/bt_btif (13168): bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0016
03-31 14:27:48.483 I/bt_btm_sec(13168): btm_sec_disconnected clearing pending flag handle:14 reason:22
03-31 14:27:48.488 E/BluetoothRemoteDevices(13168): state12newState1
03-31 14:27:48.506 D/BluetoothMapService(13168): onReceive
03-31 14:27:48.506 D/BluetoothMapService(13168): onReceive: android.bluetooth.device.action.ACL_DISCONNECTED
03-31 14:27:48.524 D/BluetoothPbapReceiver(13168): PbapReceiver onReceive action = android.bluetooth.device.action.ACL_DISCONNECTED
03-31 14:27:48.527 D/BluetoothPbapReceiver(13168): Calling start service with action = null
03-31 14:27:48.530 I/TrustAgent.Tracker(15208): [BluetoothConnectionTracker] Bluetooth disconnect broadast for Foo04 B0:B4:48:E8:FA:04
03-31 14:27:49.430 I/WCNSS_FILTER(13194): ibs_msm_serial_clock_vote: vote UART CLK OFF using UART driver's ioctl()

Enquête Complémentaire

j'ai posté une question concernant Android BLEACL_DISCONNECTED sometimes delayed.

un point commun parmi les appareils où j'ai vu le problème a été l'existence d'une carte SIM, mais une autre est API 24 ou 25. Je n'ai pas encore été capable de reproduire sur un appareil API 23 ou, quelle que soit la version, un appareil sans carte SIM installée physiquement.

même Après un complément d'enquête, je suis moins suspect de la carte SIM, et plus de la version API. Il y a plusieurs bogues en suspens (ou récemment corrigés) qui ont un comportement lié, dont certains pointent vers les versions D'API > 23; cependant, j'ai été capable par la suite de reproduire sur API 23.

je pense que cela a peu à voir avec les profils PBAP / MAP. Au contraire, leur existence dans les logs indique simplement que ces profils sont activés avec toute déconnexion possible. Tout en ne manifestant pas le comportement de reconnexion, J'ai pu voir une activation similaire PBAP / MAP lors de la manipulation d'un SensorTag TI: ces profils ont de nouveau enregistré toute déconnexion (sans rapport avec mon application).

Liste Les périphériques

j'ai pu reproduire ce numéro, à des degrés divers, sur les appareils suivants:

  • Samsung S6-API 23
  • Samsung S7-API 23
  • Samsung S7 Edge-API 24
  • Sony Xperia Z5 Compact-API 24
  • Motorola Droid Turbo 2-API 24
  • Nexus 5X-API 25
  • Google Pixel-API 25
16
demandé sur Community 2017-04-01 20:55:28

3 réponses

après une longue enquête, j'ai pu déterminer la cause profonde de mon problème: Spotify.

Avoir Spotify installé sur l'appareil Android suffisait de manifester ce comportement aberrant; l'utilisateur n'a pas besoin d'être connecté ou jamais commencé à l'application Spotify. Désinstaller ou arrêter de force l'application dans tous les cas rectifié le problème.

il semble que Spotify ait un service qui enregistre les déconnexions de Périphérique bluetooth. Lorsque le système avertit Spotify, le service se connecte immédiatement à la périphérique tout juste déconnecté- - - Je n'ai pas pris la peine de caractériser la communication de Spotify. Après environ 5 secondes, la connexion est coupée; cependant, depuis que Spotify est informé des événements de déconnexion bluetooth, le service essaie de nouveau de se connecter avec le périphérique. Il s'agit effectivement d'une boucle infinie qui ne peut être interrompue qu'en arrêtant de force Spotify ou en faisant du vélo bluetooth sur L'appareil Android.

à investigate, j'ai développé une application simple qui est notifié et les rapports Bluetooth connexion et déconnexion (ACL_CONNECTED, ACL_DISCONNECTED) événements. J'ai utilisé un scanner blable sur mon appareil Android et connecté / déconnecté avec une variété de périphériques bluetooth. Mon application de test montrerait mon interaction initiale avec le périphérique suivi d'un flux infini de connect puis déconnecter des événements. Encore une fois, cela allait continuer jusqu'à ce que Spotify soit arrêté de force.

ce qui Suit est un exemple de journalisation...

04-10 19:56:24.109  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:56:32.057  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
04-10 19:56:34.197  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:56:40.396  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
04-10 19:56:43.857  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:56:49.962  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
04-10 19:56:51.130  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:57:17.348  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
04-10 19:57:17.927  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:57:37.621  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
04-10 19:57:38.157  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_CONNECTED
04-10 19:57:44.364  D/BluetoothConnectionMoni: onReceive: deviceName=System05 deviceAddr=B0:B4:48:E8:D7:03 action=ACL_DISCONNECTED
...

il était difficile de déterminer si Spotify était la cause profonde.

ma première indication a été en regardant les Options de développeur - > exécuter des Services et noter Spotify régulièrement apparaître corrélé avec Connexion périphérique / déconnexion.

à la fin, cependant, il est venu à la fin du processus d'élimination: Une fois le comportement aberrant a commencé, je suis allé sélectivement à travers la liste des applications installées, force-arrêter ceux qui ont probablement eu quelques intérêt pour bluetooth, éventuellement voir la question cesse immédiatement quand J'ai arrêté Spotify.

J'ai fourni un rapport de bogue détaillé à Spotify il y a plusieurs semaines, mais je n'ai pas encore eu de réponse de leur part.

16
répondu Steve Yohanan 2017-04-28 20:58:24

je viens également de tomber sur ce problème en développant une application BLUETOOTHBLE. Mon appareil Android est un Sony ( http://www.gsmarena.com/sony_xperia_x_performance-7949.php) avec API 24. Il a été mis à jour à partir de L'API 23. De Android 6 - > 7.

il n'a pas de carte SIM, donc je ne pense pas que la carte SIM fasse une différence. Mais il a un slot de carte SIM, donc peut-être que c'est ce que vous voulez dire.

il est à © quipà © avec la version 4.2 de puce blà © - pas sà " r si c'est le cas avec votre question. Je vais essayer de travailler sur la question plus aujourd'hui.

2
répondu Ulf Karlsson 2017-04-03 13:15:32

cela semble être corrigé à partir de Spotify 8.4.19.792 sorti 2017-09-14.

1
répondu Pete Doyle 2017-09-19 06:16:58