5

우리는 우리가 만든 사용자 정의 블루투스 주변 장치에 연결할 수있는 완전한 응용 프로그램을 가지고 있습니다. 그러나 방금 핀 수없는 앱과 관련된 문제를 발견했습니다.안드로이드 블루투스 저에너지 때때로 잠금 장치

내 Bluetooth 작동이 모두 Service이고 일부 블루투스 작업을 끝내기를 원할 때도 있지만 주변 장치가 하나 밖에 연결되어 있지 않지만 모든 포인터를 잃어 버렸습니다. 그리고 지금은 모든 블루투스 스택이 잠기고 전화가 재부팅되어야합니다.

스캔을 중지 한 후 연결된 장치를 청소하려고 할 때 문제가 발생한다고 생각합니다. 가끔 주변에 연결되어있는 모든로부터 분리와 동시에 연결을 통해 절반 방법이라고 생각하지만 나는이 정리 방법

private void clearAllDevices() { 
     Log.e(TAG, "Clear all devices"); 
     for (int i = 0; i < _connectedPeripherals.size(); i++) { 
      Log.e(TAG, "int i:" + i + " _connectedPeripherals size:" + _connectedPeripherals.size()); 
      BluetoothGatt gatt = (BluetoothGatt) _connectedPeripherals.get(i); 
      gatt.disconnect(); 
     } 
} 

있습니다.

연결된 모든 장치 또는 연결된 장치를 청소하는 더 좋은 방법이 있습니까?

답변

5

bluetoothGatt.disconnect()만으로는 충분하지 않습니다. bluetoothGatt.close()으로 전화해야합니다. 귀하의 응용 프로그램이 BLE 장치를 사용하여 완료되면

, 그렇게 시스템이 적절하게 자원을 해제 할 수close()를 호출해야합니다.

참조 : API Guides > Bluetooth Low Energy

당신은 BluetoothGattCallback.onConnectionStateChange 콜백을 통해 bluetoothGatt.disconnect()의 결과를 확인할 수 있습니다.

+0

감사합니다. 나는 우리 시제품을 되 찾을 때 그것을 내일 시도 할 것이다. 나는 내가 읽은 튜토리얼에서 사용 된 close()를 본 적이 없다. 한 번 연결이 끊긴 onConnectionStateChange 콜백에서 close()를 호출해야합니까? – Darren

+1

'onConnectionStateChange'가 성공적인 연결 해제를보고 한 후에'close()'를 호출했습니다. – Gyebro

+0

이것은 자리를 잡았습니다. 모든 것이 훨씬 안정적으로 보입니다. 감사 – Darren