【发布时间】:2017-03-30 10:16:45
【问题描述】:
当我开始 ble(Bluetooth Le) 扫描几秒钟,然后停止扫描。然后开始,然后停止... 大约 5-8 次 Loops 后,开始动作将是 No effect ,这意味着无法接收到扫描记录。 1.此情况只出现在Android 7.0或以上(7.1.1); 2.我试过两种扫描方法:BluetoothAdapter.startLeScan()和Scanner.startScan(),没有区别。
private void scanToggle(final boolean enable) {
mScanHandler.removeCallbacks(scanTask);
if (enable) {
TelinkLog.i("ADV#scanner#startScan");
scanner = mBluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(null, settings, scanCallback);
mScanning = true;
mDeviceList.clear();
mListAdapter.notifyDataSetChanged();
//mBluetoothAdapter.startLeScan(leScanCallback);
mScanHandler.postDelayed(scanTask, SCAN_PERIOD);
} else {
TelinkLog.i("ADV#scanToggle#stopScan");
mScanning = false;
//mBluetoothAdapter.stopLeScan(leScanCallback);
scanner.stopScan(scanCallback);
}
invalidateOptionsMenu();
}
private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
TelinkLog.d("scan:" + device.getName());
for (AdvDevice advDevice : mDeviceList) {
if (device.getAddress().equals(advDevice.device.getAddress())) return;
}
mDeviceList.add(new AdvDevice(device, rssi, scanRecord));
runOnUiThread(new Runnable() {
@Override
public void run() {
mListAdapter.notifyDataSetChanged();
}
});
}
};
private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
for (AdvDevice advDevice : mDeviceList) {
if (result.getDevice().getAddress().equals(advDevice.device.getAddress())) return;
}
mDeviceList.add(new AdvDevice(result.getDevice(), result.getRssi(), result.getScanRecord().getBytes()));
runOnUiThread(new Runnable() {
@Override
public void run() {
mListAdapter.notifyDataSetChanged();
}
});
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
}
};
【问题讨论】:
-
停止扫描时我应该做些什么吗?
-
你每次扫描多少秒,等多久才能重新开始?
-
你让它工作了吗?然后你需要标记正确的答案。
标签: android bluetooth-lowenergy android-7.0-nougat