我正在尝试实现一个BLE扫描应用程序,我希望在一次扫描中列出附近的所有设备,而不是一次只获得一个BLE设备。
我从安卓文档中读到,我可以在扫描设置生成器中使用setReportDelay()来延迟扫描结果,并使用BatchScanResults()来获取所找到的设备的批次/列表。
但是,当我尝试使用扫描设置构建器中的setReportDelay()时,扫描根本不会启动,并且我得到以下错误。
04-13 16:03:19.887 8454-8454/com.example.sasnee_lab2.sasbeacon D/BluetoothLeScanner﹕ could not find callback wrapper
这是我的带有扫描设置的StartScan函数
public void startScan(BluetoothLeScanner scanner)
{
ScanFilter filter = new ScanFilter.Builder().setDeviceName(null).build();
ArrayList<ScanFilter> filters = new ArrayList<ScanFilter>();
filters.add(filter);
ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(1l)
.build();
Log.i(TAG,"The setting are "+settings.getReportDelayMillis());
scanner.startScan(filters,settings,BLEScan);
}
这是扫描回调。
private ScanCallback BLEScan = new ScanCallback() {
@Override
public void onBatchScanResults(List<ScanResult> results) {
Log.i(TAG,"The batch result is "+results.size());
}
@Override
public void onScanResult(int callbackType, ScanResult result) {
Log.i(TAG,"******************************************");
Log.i(TAG,"The scan result "+result);
Log.i(TAG,"------------------------------------------");
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
}
}
};
如果我在这里的实现中做错了什么,请告诉我。谢谢你。
发布于 2015-12-10 04:52:38
您必须检查您的硬件是否支持通过BluetoothAdapter.isOffloadedScanBatchingSupported()进行扫描批处理。如果返回false,则不应尝试设置报告延迟。
发布于 2020-05-13 17:29:35
使用以下命令:
Java
boolean f = adapter.isOffloadedScanBatchingSupported();
if (!f) builder.setReportDelay(0) else builder.setReportDelay(1)
Kotlin
val f: Boolean = adapter.isOffloadedScanBatchingSupported
if (!f) builder.setReportDelay(0) else builder.setReportDelay(1)
https://stackoverflow.com/questions/29603396
复制相似问题