블루투스 저전력(BLE)에 관련하여 이슈가 발생했다.

BLE스캐너나 내가 개발한 앱에서 BLE가 검색은 되는데, 커넥션이 안되는 문제가 발생하고 있었다.

다방면으로 디버깅해본결과, Bluetooth의 캐시를 삭제해보니 정상동작 하였다.


스택오버플로우에 검색해보니

BLE는 태생자체가 커넥션에 최적화 된것은 아니라서 연속된 커넥션과 디스커넥션이 일어나면 캐시에 쌓이고

최신 상태가 업데이트 되지 않는 상황에 놓이게 된다.

결국 검색은 될지언정 커넥션이 되지 않는 경우가 생긴다.


해결방법은 안드로이드 블루투스의 캐시를 삭제하거나 최신으로 업데이트를 하는 것.


사용자에게 문제가 생기면 "안드로이도의 블루투스의 캐시를 삭제하세요 방법은 이렇습니다"라고 할수있는가..??

큰 문제가 아닐수 없다.


소스코드에서 특정 어플리케이션의 캐시를 삭제하는 방법을 검색해봤는데,

이와 같은 문제를 경험하고 고민하는 개발자가 꽤나 있었던것 같다.


역시 세상은 넓고 유능한 개발자도 많다.

해결방법을 찾은 것!


https://stackoverflow.com/questions/22596951/how-to-programmatically-force-bluetooth-low-energy-service-discovery-on-android


안드로이드 BLE스택의 BluetoothGatt클래스에 BLE캐시를 삭제하는 함수가 있는데..

문제는 개발자에게 오픈된 함수가 아닌것.. 

하지만 자바에는 리플렉션이 있지요~

클래스에 대해서 아는게 없어도 리플렉션으로 그 클래스의 함수를 검색 및 사용가능한것.!!

리플렉션으로 BluetoothGatt의 refresh 함수를 호출하여

캐시를 업데이트함으로써 문제 해결!!

'Android 개발이야기' 카테고리의 다른 글

[Android]외부 앱을 호출하기  (0) 2018.09.20
Posted by positive86
,