我看过一些关于相同问题的帖子,但我无法为我的问题找到解决方案。
我看到新 BLE API 的回调函数 (onScanResult) 仅第一次检测到来自外围设备的广告数据包。我根本看不到后续的数据包。奇怪的是,它只发生在少数设备上。在运行 Lollipop 的 S4 上不会发生这种情况,但我在一加一上看到过这个问题。但是我已经能够使用蓝牙 Gatt 方法连接到外围设备。
我也开始和停止扫描,中间有大约 2 秒的延迟。如果我在 Lollipop 设备上使用旧 API,它似乎工作正常,但扫描似乎要慢得多。
if (isScanning)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
if(first_time)
{
first_time = false;
scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY
)
.build();
filters = new ArrayList<ScanFilter>();
}
scanner.startScan(filters, settings, new scancallback());
}else {
mBluetoothAdapter.startLeScan(mLeScanCallback);
}
isScanning = !isScanning;
}
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
Log.e(TAG, "MonitorThread.InterruptedException-1");
}
if (!isScanning) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
scanner.stopScan(new scancallback());
} else {
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
isScanning = !isScanning;
}
有人对此有解决方案吗?我一直在为这个问题头疼,但无法获得任何线索。任何帮助将不胜感激。