마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ble connection상태에 대해서 질문 드립니다.

0 추천
안녕하세요.  ble 연결 해지 및 통신을 구현 하고 있습니다.

다름이 아니라, 맨 처음 블루투스를 연결했을 때

1.connected-discovered로 정상 작동할 때가 있고,

2.connected-disconnected로 가는 경우가 있더라구요.

BluetoothGattCallback 콜백메소드로 연결 등을 감지해서 state값을

mainActivity의 브로드캐스트리시버로 날려서 처리를 하는데..

간혹가다가 2번같은 상황이 발생합니다.

(1번의 discovered가 되면 onServicesDiscovered를 통해 처리합니다.)

지금 블루투스 기기를 끄고 키고 반복하면서 테스트 하는데 4,5번 중 1번은 이런

에러가 발생하네요.. 커넥션 후에 왜 바로 디스커넥트가 감지되는지 이유를 모르겠습니다;

따로 그 사이에 disconnect에 대한 처리를 한것도 아니고 ,

종료나 언바운드 등은 destroy에서 처리하고 있거든요..

ble에 대해서 잘 모르는데, 혹시 이런 경우도 있나요?

1.이 전에 제대로 종료 되지 않았거나(disconnect 처리를 해야 하는데 한쪽만 일방적으로 끊은 경우)

2.연결/해제/연결 등 블루투스 통신간의 텀이 짧아서 발생하는 에러.

 

긴 글 읽어주셔서 감사합니다. 조언 해주시면 감사하겠습니다 . (__)
질문 님이 2017년 9월 1일 질문

1개의 답변

0 추천
BLE 통신은 오랜동안 만들 제조사들이 단말의 통신이 좀 불안한 것 같습니다.

제 경우에도 pincode 입력시 꼭 처음에 한번은 끊어지고 두번째 연결에서 붙습니다. 때문에 pincode 창이 두번 뜨죠.

그래서 pincode를 미리 device에 세팅하고 연결하니 한번에 연결이 됩니다.

ping을 2초마다 보내는대도, 한번씩 끊어지고 자동 재접속하고 그럽니다.

BLE는 그런 환경에서도 동작하게 만들 각오를 하고 진행해야 한다고 생각합니다. 거리도 짧고.. 기기간 간섭도 심합니다.

블루투스 헤드셋을 폰에 연결해서 써보세요. BLE 인식 거의 안됩니다.
Will Kim (43,170 포인트) 님이 2017년 9월 1일 답변
will kim님 답변 감사합니다..
결국엔 불안정한 통신을 앱에서 보완해야 한다 이 말씀이신가요..?
연결이 끊기면 앱에서 강제로라도 붙도록 말이죠.
첨엔 connected를 받아왔는데 바로 다음 state가 disconnected면 결국 커넥트가 안된 상태를 의미하는건가요?
기기가 끊으면 앱에서 할 수 있는 것은 없죠.
예를들면, 자동차 리모콘 앱이라고 가정을 하면,
근처에 있으면 자동으로 연결되고, 버튼A를 누르면 트렁크가 열린다고 가정하죠.
그러면 중간에 앱이 연결이 끊기더라도, Seamless하게 연결을 다시 해 놓는다거나, 유저가 동작을 할 때, 연결이 안되어 있으면 연결하고 그 기능을 수행하거나 하는 등, 연결이 안좋아도 서비스 시나리오상에 문제가 없게 끔 하는게 중요하다는 이야기입니다.
BLE 통신에서 앱이 할 수 있는 것은 별로 없습니다. HM-10 같은 훌륭한 기기도 불안하기는 마찬가지입니다.
답변 감사합니다.
현재 will kim님과 유사하게 한 번 연결되었던 블루투스 주소가 scan시 탐지되면 굳이 스캔리스트에서 선택하지 않아도 sharedpreference에 저장되어있던걸 가져와서 자동으로 연결하게끔[사용자 입장에선] 구현했습니다. 문제는 블루투스 기기가 불안정한 것인지 본문대로 connected-discovered[정상패턴]인 경우가 있고 connected-disconnected인 경우가 종종 발생하네요..이런 경우엔 앱을껐다켜야 할거같은데 .. 결국엔 흐름이 불안정하지 않게 시나리오 구현을 잘 해야 한다 이 말씀이신거죠?
네 맥락은 맞는데요.
끊기면 다시 자동으로 연결하면 되죠. 굳이 앱을 껐다 켤 필요는 없죠.
기악은 맥어드레스로 하시는거죠?
...