use*_*879 1 android bluetooth bluetooth-lowenergy
我试图发现蓝牙低能耗设备,但我有onLeScan方法的问题.它被调用两次,因此所有设备都加倍了.
我用来启动扫描的方法:
private void scanLeDevice(final boolean enable) {
if (enable) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
bluetoothAdapter.stopLeScan(getLeScanCallback());
scanning = false;
}
}, SCAN_PERIOD);
scanning = true;
bluetoothAdapter.startLeScan(getLeScanCallback());
} else {
bluetoothAdapter.stopLeScan(getLeScanCallback());
scanning = false;
}
}
Run Code Online (Sandbox Code Playgroud)
返回LeScanCallback的方法:
private BluetoothAdapter.LeScanCallback getLeScanCallback(){
BluetoothAdapter.LeScanCallback leScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice bluetoothDevice, int rssi
, byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "device found");
Device device = new Device();
device.setName(bluetoothDevice.getName());
device.setAddress(bluetoothDevice.getAddress());
devices.add(device);
deviceListAdapter.notifyDataSetChanged();
}
});
}
};
return leScanCallback;
}
Run Code Online (Sandbox Code Playgroud)
是的,如果BLE设备的广告周期与扫描周期相比足够频繁,则在扫描周期内可能会多次出现.因此,您应该识别每个BLE设备(可能带有名称或地址),并将它们仅添加到列表中一次.您可以保留最近看到的信标的单独列表,或者只检查是否devices已包含找到的设备并避免添加重复项.(或者使用a Set代替List.)如果BLE设备已经存在于列表中,只需更新任何数据(如果显示它就像RSSI一样).你可能需要重写equals(),并hashCode()在Device做出任何List.contains()或Set正常工作
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |