2017-12-11 13 views
0

내 응용 프로그램이 최대 3 개의 다른 BLE 주변 장치 (MAC 주소로 식별 됨)를 지속적으로 검색하도록합니다. 하나의 장치가 발견되면 그 장치를 검색하지 않고 연결합니다. 코드 : 1 디바이스 및 장치 3에 대한하나에 연결하는 동안 다른 BLE 장치를 계속 검색합니다.

static Observable<ScanResult> bleSharedScanner = MyApplication 
     .getRxBleClient() 
     .scanBleDevices(new ScanSettings.Builder() 
       .setScanMode(SCAN_MODE) 
       .build()) 
     .share(); 

static Observable<ScanResult> device1Scanner = bleSharedScanner 
     .filter(scanResult -> scanResult.getBleDevice().getMacAddress().equalsIgnoreCase(device1MacAddress) 
     ); 

코드는 동일합니다. 처음에는이 3 가지 장치 스캐너를 모두 구독합니다. 장치 중 하나를 찾을 때 unsubscribe 그 구독 - 그 사이에 다른 두 스캔 계속됩니다.

지금까지 테스트 Android 휴대 전화에서 작동하는 것으로 보입니다. 그러나 a previous question에 대한 귀하의 답변 : "... 접속하기 전에 scanSubscription을 중지하십시오. - 때때로 Android가 스캔 및 연결을 동시에 처리하지 못합니다."

일반적인 문제입니까? 좋은 해결 방법이 있습니까? 발견 된 장치와 상호 작용하면서 다른 장치를 계속 스캐닝해야합니다.

답변

1

두 가지 주변 장치를 사용하여 스캔이 진행되는 동안 주변 장치에 연결할 때 적어도 일부 화웨이 장치에 문제가 있음을 보여줍니다 (P8 Lite 및 P9에서 확인).

스캔이 진행 중일 때 LE_CREATE_CONNECTION 명령에 대해 COMMAND_DISALLOWED을 받았습니다. 호스트와 BLE 칩 간의 통신은 HCI Snoop Log에서 추출되었습니다. 유일한 해결 방법은 연결 설정 기간 동안 검사를 중지하는 것이 었습니다.

불행히도 우리는 증명할 통계가 없습니다.

1

올바른 방법은 각 장치에 연결하고 autoConnect 플래그를 true로 설정하는 것입니다. 그런 다음 여러 개의 연결이 보류 중일 수 있으며 연결 시도가 검색 할 때보 다 시간이 초과되지 않습니다.

유일한 문제는 스택이 장치의 주소 유형 (공개 또는 무작위)을 올바르게 알 수 있도록 최신 Bluetooth를 다시 시작한 이후에 본딩되거나 스캔 된 것이어야한다는 것입니다.

어쨌든 일반적으로 사용되는 Android 기기의 99 %는 동시에 스캔하고 시작할 수있는 블루투스 칩을 가지고 있습니다. Huawei P8 라이트와 저렴한 아수스 타블렛이 지금까지 발견하지 못한 유일한 예외입니다.