我正在尝试用android中的ble设备(信标)做室内位置系统。它在程序开头找到最近的信标。它会在几秒钟内检测到位置变化,但几秒钟之后它就会对变化做出太晚的反应。
现在我只打印信标的ID(我给了这个ID)
我认为问题与记忆有关。可能是什么问题呢?
LeScanCallback和Handler功能:
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
List<AdRecord> records = AdRecord.parseScanRecord(scanRecord);
beaconScan = new BluetoothBeacon(records, device.getAddress(), rssi);
mHandler.sendMessage(Message.obtain(null, 0, beaconScan));
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
beaconHandler = (BluetoothBeacon) msg.obj;
mBeacons.put(beaconHandler.getAddress(), beaconHandler);
rssiVal = getRssiString(beaconHandler);
dbHelper.insertDevice(beaconHandler.getName(), beaconHandler.getAddress(),
rangeValue,rssiVal,currentTime);
rssiID = model.findNear(beaconHandler.getAddress(),beaconHandler.getSignal());
Log.i("id", "Nearest beacon id: " + rssiID);
}
};
答案 0 :(得分:0)
onLeScan 是一个异步回调,只有在 BluetoothAdapter 完成扫描时才会调用。如果没有启动 startLeScan 的代码,并假设您正确执行此操作(意味着您没有每秒调用此函数数百万次),则此代码段不应存在内存问题。 几秒延迟就是扫描的工作原理,扫描子程序从头到尾运行需要一些时间。