티스토리 뷰
회사에서 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() 를 실행해서 강제로 연결 되었었던 장비 정보를 제거해야 한다.
'Dart & Flutter > Error 해결 정리' 카테고리의 다른 글
This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. (1) | 2024.11.16 |
---|---|
Android studio 에서 빌드 에러 (0) | 2024.10.28 |
Module was compiled with an incompatible version of Kotlin 에러 (0) | 2024.03.13 |
TextField가 keyboard 에 가려지는 문제 (0) | 2023.10.12 |
WidgetBinding.instance.addPostFrameCallback 이 호출되지 않는다. (0) | 2023.09.14 |
- Total
- Today
- Yesterday
- 에러
- 크롬
- firebase
- 앱개발
- UI
- position
- Bluetooth
- 앱 프로그래밍
- 이미지
- SizedBox
- TextField
- TextFormField
- Flutter
- 인사이트
- 플러터
- 한빛미디어
- addPostFrameCallback
- hide
- Syncfusion
- 디자인
- IOS
- plugin
- 문제 해결
- Chrome
- UX
- error
- BLE
- 앱
- DART
- 다트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |