蓝牙室内位置使用太多内存

时间:2014-11-28 15:15:56

标签: android bluetooth indoor-positioning-system

我正在尝试用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);

        }
    };

1 个答案:

答案 0 :(得分:0)

onLeScan 是一个异步回调,只有在 BluetoothAdapter 完成扫描时才会调用。如果没有启动 startLeScan 的代码,并假设您正确执行此操作(意味着您没有每秒调用此函数数百万次),则此代码段不应存在内存问题。 几秒延迟就是扫描的工作原理,扫描子程序从头到尾运行需要一些时间。