Android Bluetooth Low Energy(BLE) communication 1

사용 언어: Kotlin 1.6.0
사용 버전: Android Studio 2020.3.1.Patch 3
​

안드로이드 Bluetooth Low Energy(BLE) communication 1을 알아보겠습니다.

​
요즘 나오는 안드로이드에는 Bluetooth Classic과 Bluetooth Low Energy가 모두 포함되어 있습니다.
​
Bluetooth Low Energy는 줄여서 BLE라고도 부릅니다.
​
그럼 Bluetooth Classic과 Bluetooth Low Energy의 차이를 간단히 알려드리겠습니다.
Classic과 Low Energy의 큰 차이는 데이터의 전송량이라고 생각하시면 됩니다. Classic은 음악 재생과 같은 큰 용량을 무선으로 전송하는 기술이고, Low Energy의 경우는 작은 양의 데이터를 전송합니다. 어떤 사람은 티스푼 1 술 정도의 크기라고 비유하더군요. 그래서 Low Energy는 IoT 같이 저전력으로 오래 작동되어야 하는 기기에 많이 사용됩니다.
Low Energy와 Classic은 전혀 다른 프로토콜을 사용하므로 두 개의 모듈은 직접적으로 통신할 수 없습니다. 즉, Low Energy로 Classic과 통신할 수 없습니다. 또는 반대의 경우, Classic으로 Low Energy와 통신할 수 없습니다.
​
자 이제 그럼 본격적으로 BLE 통신을 알아보겠습니다.
BLE를 사용하기 위해서는 먼저 permission이 필요합니다.



만약 BLE가 앱 사용에 필수적이라면, uses-features를 통해서 BLE가 지원 안되는 휴대폰으로는 GooglePlay에서 설치가 안 되게 설정할 수 있습니다.



Manifest에 <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />를 입력하면 됩니다.

​

만약 BLE 존재 유무가 필수적인 조건이 아니라면, 실행되는 동안(Runtime) 해당 기능이 있는지 없는지 확인하고 BLE 기능을 사용하지 못하게 하면 됩니다.






위의 사진을 참고하시고, 저는 자세히 다루지 않겠습니다.

​

​

블루투스와 관련해서 Android 12(API 31)에서 추가된 정보들이 있습니다.







1. Bluetooth 장치를 찾으려면 BLUETOOTH_SCAN 권한이 필요합니다.

2. 현재 휴대폰을 다른 장치에게 알리려면 BLUETOOTH_ADVERTISE 권한이 필요합니다.

3. 이미 페어링 된 Bluetooth 장치와 통신하려면 BLUETOOTH_CONNECT 권한이 필요합니다.

4. Android 12 버전 아래의 버전에서도 동작되게 하려면, 기존에 있는 Bluetooth 권한에 android:maxSdkVersion 30을 추가해 줍니다.

5. 만약 Bluetooth를 이용한 현재 위치정보를 이용하게 된다면 ACCESS_FINE_LOCATION 권한을 설정해 줍니다. 그게 아니라면 BLUETOOTH_SCAN에 neverForLocation 설정을 통해 위치 권한 없이 사용할 수 있습니다.






BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT, BLUETOOTH_SCAN의 권한은 runtime permissions이기 때문에 사용자에게 직접 권한을 요청해서 수락을 받아야 합니다.

​










Android 12에서의 Bluetooth 권한 모습은 다음과 같습니다.





Android 11(API 30) 이하의 경우는 다음과 같은 권한만 필요합니다.




BLUETOOTH 권한과 ACCESS_FINE_LOCATION이 필요합니다. 안드로이드 9(API 29) 이하의 경우에는 ACCESS_COARSE_LOCATION으로 대체할 수 있습니다.

​

FINE LOCATION은 GPS 정보와 Internet 정보를 활용하여 위치를 정의하는 것이고, COARSE LOCATION은 Internet 정보를 활용하여 위치를 구하기 때문에 FINE이 더 정확한 결괏값을 보여줍니다.

​

위치 권한 없이 사용하고 싶다면, Android 8(API 28) 이상에서는 CompanionDeviceManager를 활용하여 Bluetooth 스캔을 할 수 있습니다.

​

​

​

앱이 블루투스 장치 검색을 시작하거나 설정을 변경하려고 한다면 BLUETOOTH_ADMIN 권한이 필요합니다. 만약 서비스 형식으로 백그라운드에서 Android 10 또는 Android 11에서 작동한다면 ACESS_BACKGROUND_LOCATION 권한이 필요합니다.





지금까지 안드로이드 BLE 통신을 위한 안드로이드 권한 설정을 알아보았습니다.

다음 시간에 이어서 계속 BLE를 알아보겠습니다.

​

​

끝.

​

카테고리: Android

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

KiCad 시작하기 3 (새로운 소자 추가하기)

일본어 문장부호

Python OpenCV 빈 화면 만들기

음악 총보(Score), 파트보(Part)

Android Custom IME(Input method editor) 만들기

딩기 요트 명칭

KiCad 시작하기 2 (PCB 만들기)

Android GDPR Consent 사용

KiCad 시작하기 5 (만든 PCB 주문하기)