Я пытаюсь обнаружить устройства с низкой энергией Bluetooth, но у меня проблема с методом onLeScan. Он вызывается дважды, и в результате все устройства удваиваются.onLeScan вызывается дважды при обнаружении устройств bluetooth le
Метод, который я использую, чтобы начать сканирование:
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;
}
}
Метод возвращение 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;
}
Там, наверное, не хватает кода размещен, чтобы диагностировать проблему. Попробуйте отладить и установите точку останова на getLeScanCallback, чтобы узнать, получилось ли это имя 2x. Кроме того, иногда устройства обнаруживаются дважды при сканировании. Поэтому вам нужно проверить, находятся ли они уже в устройствах перед добавлением –
getLeScanCallback не вызывается дважды, но вы правы, я должен проверить наличие дубликатов. Я думал, что каждое устройство можно обнаружить только один раз. Спасибо за помощь. – user1852879