我试图在Android的onScanResult函数中获取两个设备名称和地址,但无法获取这些信息。据我了解,该函数会定期进行调用,直到停止搜索为止,并且该函数会给出有关已创建设备的结果,但我无法同时获得找到的设备数量和设备信息。
这是我的代码:
private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
if("MyBLEdevice".equals(result.getDevice().getName())){
bleDevice = result.getDevice();
if(bleScanner !=null){
bleScanner.stopScan(scanCallback);
}
}
super.onScanResult(callbackType, result);
}
};
我更改了代码,但无法停止scanResult
boolean isDuplicate = false;
private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
if("MyBLEdevice".equals(result.getDevice().getName())){
for(BluetoothDevice device : mLeDevices)
{
if(device.getAddress().equals(result.getDevice().getAddress())){
isDuplicate = true;
}
if(!isDuplicate){
mLeDevices.add(result.getDevice());
}
if(mLeDevices.size()==2)
{
bleScanner.stopScan(scanCallback);
bleScanner.flushPendingScanResults(scanCallback);
}
}
}
super.onScanResult(callbackType, result);
}
};
答案 0 :(得分:0)
您将不断获得结果,每个结果仅适用于一台设备,即使在发送新广告后也从同一设备进行扫描。
要获取具有唯一设备的列表,您应该删除重复的设备,更好的选择是在收到该设备的更新时更新列表中已经存在的设备。
您可以使用device.getName()
来获得2种特定的设备,请确保您是广告名称,长名称不是通过广告发送的,还是通过以下方式提供服务UUID:
List<ParcelUuid> parcelUuids = result.getScanRecord().getServiceUuids();
并比较您创建的用于广告的UUID。