Android 에서 BluetoothLeScanner를 가지고, 주변 기기를 스캔을 하게되면
- void onScanResult(int callbackType, ScanResult result) 또는
- void onBatchScanResults(List<ScanResult> results) 로 스캔한 결과를 가지고 온다.
ScanResult 가 무었을 담고 있는지 확인해보면.
공개 방법
int | describeContents()이 Parcelable 인스턴스의 마샬링된 표현에 포함된 특수 객체의 종류를 설명하세요. |
boolean | equals(Object obj)다른 객체가 이 객체와 "같은지" 여부를 나타냅니다. |
int | getAdvertisingSid()광고 세트 ID를 반환합니다. |
int | getDataStatus()데이터 상태를 반환합니다. |
BluetoothDevice | getDevice()Bluetooth 장치 주소로 식별된 원격 Bluetooth 장치를 반환합니다. |
int | getPeriodicAdvertisingInterval()1.25ms 단위로 주기적 광고 간격을 반환합니다. |
int | getPrimaryPhy()이 광고가 수신된 기본 물리적 계층을 반환합니다. |
int | getRssi()수신된 신호 강도를 dBm 단위로 반환합니다. |
ScanRecord | getScanRecord()광고와 스캔 응답의 조합인 스캔 레코드를 반환합니다. |
int | getSecondaryPhy()이 광고가 수신된 보조 물리적 계층을 반환합니다. |
long | getTimestampNanos()스캔 기록이 관찰된 부팅 이후 타임스탬프를 반환합니다. |
int | getTxPower()전송 전력을 dBm 단위로 반환합니다. |
int | hashCode()객체의 해시 코드 값을 반환합니다. |
boolean | isConnectable()이 객체가 연결 가능한 스캔 결과를 나타내는 경우 true를 반환합니다. |
boolean | isLegacy()이 개체가 레거시 스캔 결과를 나타내는 경우 true를 반환합니다. |
String | toString()객체의 문자열 표현을 반환합니다. |
void | writeToParcel(Parcel dest, int flags)이 물체를 소포로 펴세요. |
위의 정보들을 결과로 반환해주는 것을 알 수 있다.
여기서 궁금한 것은, isConnectable 인데 연결이 불가능한 BLE 주변기기를 왜 스캔해줬을까가 의문이다.
그래서 isConnectable == false 인것들은 무엇인지, 무슨사유인지 알아보고자 한다.
1. 브로드캐스트(광고) 전용 기기
일부 BLE 기기는 연결이 불가능한 "브로드캐스트(Broadcast) 전용" 기기일 수 있습니다.
예시 )
비콘(Beacon)
단순한 센서 데이터 전송 기기 (예: 온도 센서, 습도 센서 등)
2. 연결 제한 모드인 기기
일부 BLE 기기는 특정 조건을 만족해야만 연결을 허용하도록 설계되어 있습니다.
- 페어링된 기기만 연결을 허용.
- 특정 인증 키를 요구.
- 특정 시간 동안만 연결 가능.
예시)
BLE 스마트 락 → 초기 상태에서는 누구나 연결 가능 → 페어링 후에는 등록된 기기만 허용.
BLE 헬스케어 기기 → 초기 페어링은 누구나 가능 → 이후 등록된 사용자만 허용.
3. 이미 다른 기기와 연결 중
BLE 기기는 동시에 하나의 중앙(Central) 기기와만 연결이 가능한 경우가 많습니다.
이미 다른 기기와 연결되어 있다면, 다른 기기에서는 스캔은 가능하지만 연결은 불가능할 수 있습니다.
4. BLE 광고 패킷 설정 문제
일부 BLE 기기는 광고 패킷에 "연결 가능" 플래그를 설정하지 않은 상태로 방송될 수 있습니다.
5. 권한 및 위치 서비스 문제 (Android 6.0 이상)
Android에서는 위치 서비스가 활성화되어 있어야 BLE 스캔이 정상적으로 작동합니다.
위치 서비스가 꺼져 있으면, 스캔은 가능해도 연결이 실패할 수 있습니다.
6. 권한 부족
BLUETOOTH_CONNECT, BLUETOOTH_SCAN, ACCESS_FINE_LOCATION 권한이 없으면 스캔과 연결이 제한될 수 있습니다
'Android' 카테고리의 다른 글
Android Context 비교 (0) | 2025.04.04 |
---|---|
ExpandableListView 사용법 (작성중 ) (0) | 2025.02.19 |
외부 경로에 디렉토리 생성 (펌) (0) | 2024.12.12 |
[Android 빌드 에러 ] figlib 관련 (0) | 2024.11.07 |
Android 모듈 만들기 / 라이브러리 만들기 (0) | 2024.09.04 |