현재 코틀린으로 BLE 통신을 개발중인데요.
동작 순서는
스캐닝을 통해 주변기기를 가져와서
RecyclerView에 기기 목록을 리스팅하고
리스팅된 아이템을 클릭하면 연결을 한 뒤에
특정 버튼을 누르면 정해진 Characteristic을 통해서
Descriptor를 가져오고 Descriptor에 writeDescriptor를 이용해서
센싱된 데이터를 송신하도록 기기에 명령을 쓰도록 해놨습니다.
그런데 중간에 자꾸 블루투스 연결이 끊기는데요
BluetoothGattCallback의 onConnectionStateChange함수에서
newState가 BluetoothProfile.STATE_DISCONNECTED인 경우에 다시 지속적으로 센싱 데이터를 읽어오고 싶은데
연결할때의 방식의 코드를 다시 실행하게끔 작성하니
동작을 하지 않습니다.
혹시 연결이 끊기는 경우에 이어서 다시 센싱데이터를 읽어올 수 있는 방법을 알려주실수 있을까요?
// 특정 UUID의 서비스를 발견한 경우에 실행되는 부분입니다.
gatt!!.setCharacteristicNotification(
service.getCharacteristic(HSDeviceObject.HSDEVICE_DEPTH_CHARACTERISTIC_UUID),
true
)
var descriptor = service.getCharacteristic(HSDeviceObject.HSDEVICE_DEPTH_CHARACTERISTIC_UUID)
.getDescriptor(HSDeviceObject.HSDEVICE_DEPTH_CHARACTER_DESCRIPTOR_UUID)
descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
start_measure_btn.setOnClickListener {
if(setupViewController.getState() == State.CONNECTED) {
gatt!!.writeDescriptor(descriptor)
setupViewController.setState(State.MEASURING)
}
}
// 이 함수는 BluetoothGattCallback 오버라이딩된 함수입니다.
override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
super.onConnectionStateChange(gatt, status, newState)
if(newState == BluetoothProfile.STATE_CONNECTED) {
gatt?.discoverServices()
}
else if(newState == BluetoothProfile.STATE_DISCONNECTING) {
}
else if(newState == BluetoothProfile.STATE_DISCONNECTED) {
// 블루투스 연결이 끊긴 경우에 처리할 수 있는 부분
}
}
아 애초에 처음 연결해서 센싱데이터를 받아서 로그가 찍힐때
이게 30초정도 뒤에는 끊기는 것 같습니다.
정확하지는 않습니다만 연결할때마다
30초 정도 있다가 끊기는 것 같은데 이 부분은 어떻게 처리할 수 있을까요 ?