Java Android中未调用onBatchScanResults
我现在正在android开发中使用新的BLEAPI 基本思想是使用蓝牙扫描结果来膨胀recyclerview(列表) 我遵循了谷歌开发者的建议 现在我有两个问题: 1.Java Android中未调用onBatchScanResults,java,android,callback,bluetooth-lowenergy,ibeacon,Java,Android,Callback,Bluetooth Lowenergy,Ibeacon,我现在正在android开发中使用新的BLEAPI 基本思想是使用蓝牙扫描结果来膨胀recyclerview(列表) 我遵循了谷歌开发者的建议 现在我有两个问题: 1. onBatchScanResultslistener从未被触发,但onScanResult工作正常,这是因为扫描仪仅检测到附近的一个传感器吗 与其他应用程序相比,我的BLE扫描仪要慢得多 下面是两个核心函数的代码片段 private void scanBLE(boolean enable) { final Bluetoo
onBatchScanResults
listener从未被触发,但onScanResult
工作正常,这是因为扫描仪仅检测到附近的一个传感器吗
private void scanBLE(boolean enable) {
final BluetoothLeScanner mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
if (enable) {
mScanning = true;
mBluetoothLeScanner.startScan(mScanCallback);
} else {
if (mScanning) {
mScanning = false;
mBluetoothLeScanner.stopScan(mScanCallback);
}
}
Log.i(TAG, "now the scanning state is" + mScanning);
}
// Device scan callback.
private ScanCallback mScanCallback =
new ScanCallback() {
public void onScanResult(int callbackType, android.bluetooth.le.ScanResult result) {
addBeaconTolist(result, beaconsList);
mAdapter.notifyDataSetChanged();
};
public void onScanFailed(int errorCode) {
Log.i(TAG, "error code is:" + errorCode);
};
public void onBatchScanResults(java.util.List<android.bluetooth.le.ScanResult> results) {
Log.i(TAG, "event linstener is called!!!!");
Log.i(TAG, "batch result are:" + results);
beaconsList.clear();
for (int i = 0; i < results.size(); i++) {
ScanResult result = results.get(i);
addBeaconTolist(result, beaconsList);
}
mAdapter.notifyDataSetChanged();
};
};
private void可扫描(布尔启用){
最终BluetoothLeScanner mBluetoothLeScanner=mBluetoothAdapter.getBluetoothLeScanner();
如果(启用){
mScanning=true;
mbluetotherlescanner.startScan(mScanCallback);
}否则{
如果(扫描){
mScanning=false;
mBluetoothLeScanner.stopScan(mScanCallback);
}
}
Log.i(标记“现在扫描状态为”+mScanning);
}
//设备扫描回调。
专用扫描回调mScanCallback=
新ScanCallback(){
public void onScanResult(int callbackType,android.bluetooth.le.ScanResult){
添加BeaContoList(结果,BeaConList);
mAdapter.notifyDataSetChanged();
};
公共无效OnScan失败(内部错误代码){
Log.i(标签,“错误代码为:”+errorCode);
};
public void onBatchScanResults(java.util.List结果){
Log.i(标记“调用事件linstener!!!!”);
Log.i(标记“批次结果为:+结果”);
beaconList.clear();
对于(int i=0;i
在main中,片段如下所示:
beaconsList = new ArrayList<BeaconsInfo>();
mAdapter = new BeaconsAdapter(beaconsList);
mRecyclerView.setAdapter(mAdapter);
scannBLE(true);
beaconlist=newarraylist();
mAdapter=新BeaconsAdapter(beaconsList);
mRecyclerView.setAdapter(mAdapter);
斯坎恩布尔(真);
是否获得批处理结果或单个结果取决于扫描设置
ScanSettings
。请查看文档中的,然后尝试使用扫描模式\u低功率
,这将成批显示结果。您还可以尝试使用setReportDelay(long reportDelayMillis)
调整批处理间隔;你可以看到我写的一篇关于这些设置的强大优势的博文runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
请尝试
setUseHardwareBatchingSupported(true)
。这为我在moto360第二代上解决了这个问题。我认为这是为更新的API自动实现的 我是否需要使用flushPendingScanResults()来获取批扫描结果?不,仅当您希望尽早获取批时才需要。如果你只是等待,当操作系统决定发送它时,你会得到它。读了你的博客后,我有一个基本问题,这个扫描是否在后台运行?还是需要一项服务来完成这项工作@Davidgyoung在我在博客中描述的案例中,是的,Android Beacon库在服务中后台运行扫描。谢谢,每次我设置扫描设置的reportDelay时,我的nexus5应用程序都会出现一个扫描失败的功能,这似乎是API的问题?