ulu*_*yca 2 android bluetooth discovery bluetooth-lowenergy network-scan
我正在开发一款Android应用程序,用于搜索经典和低能耗的蓝牙设备,这样当我按下"搜索"按钮时,它会向我显示范围内的所有蓝牙设备(低能量和经典).由于经典的BT发现和LE扫描是不同的东西,我必须单独实现它们并将它们组合在一个功能中
searchFirstLowEnergyThenClassic()或searchFirstClassicThenLowEnergy()
为了实现这一点,我必须知道发现/扫描何时结束,以便我立即开始扫描/发现其他技术.
这是我的实现:
这看起来不错,但是当我扩展行为时会出现问题.当我想要搜索时,我首先使用LE扫描或基于最后连接技术的经典发现进行搜索.例如,如果设备上次连接到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);
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我想问一个人是否有更聪明,更简单的解决方案?
PS.如果可能,非常感谢没有广播意图的解决方案.
小智 6
BluetoothAdapter的startDiscovery() 方法搜索经典和BLE设备.从扫描中获得结果后,您可以根据设备类型将它们分开.例如:
int deviceType = device.getType();
if(deviceType == BluetoothDevice.DEVICE_TYPE_CLASSIC)
{
}
else if(deviceType == BluetoothDevice.DEVICE_TYPE_LE)
{
}
else if(deviceType == BluetoothDevice.DEVICE_TYPE_DUAL)
{
}
Run Code Online (Sandbox Code Playgroud)
因此,不需要单独搜索.