Android Bluetooth Low Energy(BLE) communication 1
사용 언어: Kotlin 1.6.0
사용 버전: Android Studio 2020.3.1.Patch 3
요즘 나오는 안드로이드에는 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이 필요합니다.
사용 버전: 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 권한 모습은 다음과 같습니다.
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
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.