본문 바로가기
안드로이드

[Android] Bluetooth Le Auto Connection 구현

by 코딩히어로 2021. 8. 18.
728x90

제목


이번에 회사 프로젝트 진행 중 Android App과 TI사의 CC2541 칩과의 Bluetooth를 

 

Connection 하여 통신하는 프로그램을 만드는 데 문제는 일반 Connection이 아닌

 

Application에 의한 Auto Connection이 필요했습니다.

 

또한 Auto Connection 자체가 App과 CC2541가 가까워지면 Connection 되고

 

멀어지면 Disconnection 되어야 한다는 조건이 있었으므로 Application 자체는

 

스마트폰상에서 꺼지지 않고 Auto Connection을 해야 했습니다.

 

 

 

1. 준비사항


- CC2541 프로그램은 Peripheral을 사용하여 Disconnect 상태에서는 항상 Advertising을 통해 연결을 대기합니다.

 

- Application 상에서는 CC2541 Bluetooth 의 6byte Device Address를 통해 Auto Connection을 구현합니다.

 

- Application이 스마트폰에서 종료되면 안되어 Background Service상에 항상 동작시켜줍니다.

 

 

 

 

2. Auto Connection


Auto Connection은 생각보다 간단하기 때문에 이 부분은 크게 문제가 되지 않습니다.

 

해당 프로젝트에서는 BluetoothLeGatt Sample 을 Github에서 다운로드하여 진행하였습니다.

 

해당 프로젝트의 BluetoothLeService 서비스 클래스 내에 아래처럼 기본적으로 Connect에 대한 부분이

 

정의되어 있는데 이부분에서 AutoConnect 해당 부분만 false에서 true로 수정해주면 끝입니다.

 

설명1

이렇게 되면 마지막으로 Connection 했던 Device의 연결이 끊어져도

 

Application이 동작하는 한 Auto Connect 하게 됩니다.

 

 

3. Background 실행.


Auto Connection의 조건은 Application이 동작 할 때입니다.

 

그러면 Application이 종료되면 Auto Connect가 되지 않느냐??

 

네 맞습니다 그러므로 Application을 종료되지 않게 유지시켜 주어야 합니다.

 

원래대로라면 제가 제목으로 적은 것처럼 Background실행을 하여 유지시켜주는

 

방법을 사용하지만 구글분들... 의 정책에 의해 Background 실행은 일정 시간이 지나면

 

종료되게 변경되었습니다.

 

그래서 우리는 Foreground 실행을 통해 Application을 유지시켜 주어야 합니다.

 

아래는 Foreground를 위한 전체 서비스 코드입니다.

 

설명2

간단하게 Foreground 서비스를 만든 뒤에 Bluetooth Service를 구현해주는 방식으로

 

Application이 종료되어도 Foreground 서비스 내에서 Bluetooth Service가 동작하므로

 

Auto Connection이 가능하도록 구현하였습니다.

728x90
반응형

댓글