클래식 및 저에너지 블루투스 기기를 검색하는 Android 앱을 개발 중입니다. 검색 버튼을 누르면 모든 블루투스 기기 (저에너지 그리고 고전) 범위. 고전 BT 검색 및 LE 스캔이 여러 가지이기 때문에, 내가 별도로 구현하고이를 구현하기 위해서는 하나 개의 기능 등이CLASSIC 및 저에너지 기기에 대한 Android 블루투스 기기 스캔/검색
searchFirstLowEnergyThenClassic() 또는 searchFirstClassicThenLowEnergy()
에서 그들을 결합해야, 나는 알고있다 검색/검색이 끝나면 즉시 다른 기술에 대한 검색/검색을 시작합니다. 여기
내 구현 :- 시작 클래식 BT 발견
- 수신 BluetoothAdapter.ACTION_DISCOVERY_FINISHED
- 시작 BLE Scaning은 -> onReceive 동작이 동일 (ACTION_DISCOVERY_FINISHED) 는 BLE 스캔을
- 정지 검색 종료 때
괜찮은 것처럼 보이지만 연장 할 때 문제가 있습니다. 그는 행동. 검색을 원하면 마지막으로 연결된 기술을 기반으로하는 LE 검색 또는 Classic 검색으로 먼저 검색을 시작합니다. 예를 들어 기기가 Classic BT 기기에 마지막으로 연결된 경우 searchFirstClassicThenLowEnergy()가 실행됩니다. 그렇지 않으면 searchFirstLowEnergyThenClassic().
여러분이 생각하기에 더 복잡해집니다. 예를 들어 클래식 BT 검색이 끝나면 앱에서 검색이 종료되었는지 또는 LE 검색을 진행해야 하는지를 알아야합니다.
이 문제도 있습니다. 사용자가 첫 번째 기술을 검색/검색하는 동안 검색을 중지하면 BluetoothAdapter.ACTION_DISCOVERY_FINISHED가 수신되지만 사용자가 검색을 종료하므로 LE 스캔을 시작하면 안됩니다.
일부 플래그 (제대로 작동하지 않지만)를 사용하여 구현했지만 코드가 매우 더러워 보입니다.
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
// Classic Bluetooth discovery ended
lastOpenedType = getLastOpenedType();
if (lastOpenedType == BT_CLASSIC && !isSearchStoppedByUser()) {
// Search should continue with low energy scan
startBtLeScanning();
} else if (lastOpenedType != BT_CLASSIC && !isSearchStoppedByUser()){
// Search ended
searchProgressLayout.setVisibility(View.INVISIBLE);
} else {
// Search ended by user
searchProgressLayout.setVisibility(View.INVISIBLE);
}
}
간략히 말하자면 누군가가 더 훌륭하고 간단한 해결책을 가지고 있는지 묻고 싶습니다.
추신. 가능한 경우 방송 의도가없는 솔루션을 많이 평가합니다.
블루투스 스캔을 시작하기 위해 화면에 UI 시작/중지 버튼이 있습니까 (또는) 사용자가 앱을 열면 블루투스 검색이 자동으로 수행됩니까? –
좋은 지적. 내 사용자 타겟은 블루투스가 무엇인지 모를 것입니다. 단 하나의 버튼이 있습니다. 앱이 실행되면 사용자는 근처의 기기에 대해서만 '검색'을 누릅니다. – ulusoyca