티스토리 뷰

반응형

회사에서 Flutter로 개발한 앱과 근전도 장비는 블루투스(BLE)로 연결한다.

사용하는 BLE  라이브러리는 Flutter_Reactive_Ble 이다.

근전도 장비가 정전기나 베터리 고갈로 꺼질 경우 앱에서는 의도하지 않은 연결해제(Unintended disconnection)가 발생한다. 

 

iOS 의 경우 문제가 없이 잘 동작하지만, Android 에서는 문제가 있다. 

다른 장비와 연결을 시도하면 연결이 되지 않고, 기존에 연결되었었던 장비하고만 연결이 가능하다. 

 

우리 앱의 경우, 장비 끄기 버튼이 있는데 이 버튼을 누르면 블루투스 메시지로 장비를 꺼라는 명령을 보내고 이를 수신한 장비는 전원을 끄게 된다. 이러면 장비는 이미 꺼져있기 때문에 이후 실행되는 disconnect  명령을  OS에 보내도 장비에서 응답 할 수 없으므로 정상적인 disconnect 진행이 되지 않아 GATT cache를 계속 유지하고 있는 듯하다. 그러다 약 5초 뒤에 GATT cache가 clear 되는 듯하다. 장비가 disconnect 명령을 수신한다면 바로 clear 해주는 듯하고.

 

요약하면, 연결 되어있던 장비가 응답할 수 없는 상황일 때  disconnect가 실행되면 온전히 진행되지 못해, mobile device 의 OS 에서는 일단 기존에 연결되어있던 장비 정보를 5초 정도 유지하고 있다가, 그 이후에 삭제 한다. 이로 인해 5초 내에 다른 장비에 연결하려고 시도할 경우 연결이 되지 않는다. 이를 해결하기 위해서는 clearGattCache() 를 실행해서 강제로 연결 되었었던 장비 정보를 제거해야 한다. 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함