首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对同一设备多次使用BluetoothLeScanner调用onScanResult进行扫描

对同一设备多次使用BluetoothLeScanner调用onScanResult进行扫描
EN

Stack Overflow用户
提问于 2016-03-30 07:11:27
回答 1查看 1.7K关注 0票数 5

我在android上使用BLE实现了一个简单的advertise + scan功能,出于某种原因,我收到了很多调用同一设备的onScanResult回调。

对于广告:

代码语言:javascript
复制
//Advertise settings build
AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder();
builder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);
builder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);
builder.setConnectable(true);

AdvertiseSettings advSettings = builder.build();

//Advertise data build
AdvertiseData.Builder advDataBuilder = new AdvertiseData.Builder();
advDataBuilder.addServiceUuid(ParcelUuid.fromString(SFGattAttributes.SERVICE));

AdvertiseData advertiseData = advDataBuilder.build();

//Start Advertising
bluetoothLeAdvertiser.startAdvertising(advSettings, advertiseData, advertiseData, new BLEAdvertiserCallback());

对于扫描:

代码语言:javascript
复制
BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
bluetoothLeScanner.startScan(getScanFilters(), getScanSettings(), new BLEScanCallback());

每次唯一的不同似乎是rssi值的不同。

有没有办法避免这种多次调用?

EN

回答 1

Stack Overflow用户

发布于 2016-03-31 16:33:07

这实际上是一个特征,可用于(广告) BLE设备的测距。还有一些(较旧的)设备在扫描周期内无法获得特定设备的多个扫描结果。这就导致了对包括BLE信标在内的其他设备进行测距的问题。多个呼叫还让您知道(随着时间的推移)设备仍然可访问/可访问。

因此,如果您不想要多个呼叫,只需忽略已知设备(MAC地址)的呼叫。不能停用。

请记住,许多设备(尤其是电话)会更改其mac地址。有些甚至是每2分钟一次。要将新的mac地址映射到旧的设备(旧的mac地址)并不容易。你必须相应地处理这种行为。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36296769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档