Notice
Recent Posts
Recent Comments
Link
투케이2K
925. (Android/Java) [개념 정리] BluetoothGattCallback 블루투스 GATT 콜백 리스너 개념 정리 본문
Android
925. (Android/Java) [개념 정리] BluetoothGattCallback 블루투스 GATT 콜백 리스너 개념 정리
투케이2K 2025. 1. 1. 10:47[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Bluetooth / BluetoothGattCallback
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------
1. BluetoothGattCallback 은 API level 18 에서 추가 되었으며, 블루투스 GATT 연결 수행에 관한 콜백 응답을 확인할 때 사용 되는 추상 클래스 입니다.
2. BluetoothGattCallback 주요 메소드 정리 :
>> onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, byte[] value) : 원격 특성 알림의 결과로 콜백이 트리거되었습니다.
>> onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, byte[] value, int status) : 특성 읽기 작업의 결과를 보고하는 콜백입니다.
>> onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) : 특성 쓰기 작업의 결과를 나타내는 콜백입니다.
>> onConnectionStateChange(BluetoothGatt gatt, int status, int newState) : GATT 클라이언트가 원격 GATT 서버에 연결되거나 연결 해제되는 시점을 나타내는 콜백입니다.
>> onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status, byte[] value) : 설명자 읽기 작업의 결과를 보고하는 콜백입니다.
>> onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) : 설명자 쓰기 작업의 결과를 나타내는 콜백입니다.
>> onMtuChanged(BluetoothGatt gatt, int mtu, int status) : 주어진 장치 연결에 대한 MTU가 변경되었음을 나타내는 콜백입니다.
>> onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) : BluetoothGatt.setPreferredPhyPHY를 변경하는 원격 장치의 결과로 인해 콜백이 트리거됩니다.
>> onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) : 원격 장치 연결에 대한 RSSI를 보고하는 콜백입니다.
>> onReliableWriteCompleted(BluetoothGatt gatt, int status) : 신뢰할 수 있는 쓰기 트랜잭션이 완료되면 호출되는 콜백입니다.
>> onServiceChanged(BluetoothGatt gatt) : 서비스 변경 이벤트를 나타내는 콜백이 수신되었습니다.
>> onServicesDiscovered(BluetoothGatt gatt, int status) : 원격 장치의 원격 서비스, 특성 및 설명자 목록이 업데이트되었을 때, 즉 새로운 서비스가 검색되었을 때 호출되는 콜백입니다.
3. BluetoothGattCallback 주의점 :
>> 해당 콜백함수는 API 레벨 33에서 >> 34로 넘어가는 과정에 변경 된 사항이 많으니 안드로이드 도큐먼트 문서 참고가 필히 필요합니다.
4. BluetoothGattCallback 예시 소스 코드 :
bluetoothGatt = device.connectGatt(mMainCtx, false, new BluetoothGattCallback() {
// --------------------------------------------------
// TODO [GATT 클라이언트가 원격 GATT 서버에 연결되거나 연결 해제되는 시점을 나타내는 콜백입니다.]
// --------------------------------------------------
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
S_Log._W_(ACTIVITY_NAME + " :: onConnectionStateChange :: 원격 장치 연결 및 해제 상태 체크 콜백 동작", new String[]{
"Device Status :: " + String.valueOf(newState)
});
if (newState == BluetoothAdapter.STATE_CONNECTED) { // [새로운 장치 연결 됨]
} else if (newState == BluetoothAdapter.STATE_DISCONNECTED) { // [연결 된 장치 해제 됨]
}
}
// --------------------------------------------------
// TODO [원격 장치의 원격 서비스, 특성 및 설명자 목록이 업데이트되었을 때, 즉 새로운 서비스가 검색되었을 때 호출되는 콜백입니다.]
// --------------------------------------------------
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
super.onServicesDiscovered(gatt, status);
if (status == BluetoothGatt.GATT_SUCCESS) {
} else {
}
}
// --------------------------------------------------
// TODO [특성 읽기 작업의 결과를 보고하는 콜백입니다.]
// --------------------------------------------------
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, byte []value, int status) {
super.onCharacteristicRead(gatt, characteristic, value, status);
S_Log.w("BLE_Read", "MAC : " + String.valueOf(device.getAddress()) + " / " + "STATUS : " + String.valueOf(status));
}
// --------------------------------------------------
// TODO [원격 특성 알림의 결과로 콜백이 트리거되었습니다.]
// --------------------------------------------------
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, byte []value) {
super.onCharacteristicChanged(gatt, characteristic, value);
S_Log.w("BLE_Changed", "MAC : " + String.valueOf(device.getAddress()));
}
// --------------------------------------------------
// TODO [특성 쓰기 작업의 결과를 나타내는 콜백입니다.]
// --------------------------------------------------
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
S_Log.w("BLE_Write", "MAC : " + String.valueOf(device.getAddress()) + " / " + "STATUS : " + String.valueOf(status));
}
});
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
https://developer.android.com/reference/android/bluetooth/BluetoothGattCallback
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments