【发布时间】:2017-04-17 02:55:18
【问题描述】:
我正在尝试发现蓝牙低功耗设备,但我对 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;
}
}
返回 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 没有被调用两次,但你是对的,我应该检查重复项。我认为每个设备只能被发现一次。谢谢你的帮助。
标签: android bluetooth bluetooth-lowenergy