首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多次调用startLeScan方法无法正确扫描BLE设备

多次调用startLeScan方法无法正确扫描BLE设备
EN

Stack Overflow用户
提问于 2015-05-20 04:28:45
回答 1查看 1.1K关注 0票数 4

我试图在我的安卓应用程序中多次调用startLeScan方法,它第一次扫描BLE设备,从第二次开始它不能扫描设备。我在我的应用程序中有循环扫描,每10秒停止扫描一次,然后重新开始。下面是一些日志,它们显示了我的应用程序的行为。

05-20 00:45:31.146  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.147  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.160  15841-15852/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=133 clientIf=0
05-20 00:45:31.161  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.165  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.169  15841-15909/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=7
05-20 00:45:31.171  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.175  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.179  15841-15853/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=8
05-20 00:45:31.181  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.185  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.189  15841-18615/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=6
05-20 00:45:31.191  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.192  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.202  15841-15852/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=133 clientIf=0
05-20 00:45:31.203  15841-15841/XXXXX D/BluetoothAdapter﹕ stopLeScan()
05-20 00:45:31.207  15841-15841/XXXXX D/BluetoothAdapter﹕ startLeScan(): null
05-20 00:45:31.211  15841-15909/XXXXX D/BluetoothAdapter﹕ onClientRegistered() - status=0 clientIf=10

我在我的BluetothLEScanerForMR2.java中有这些函数调用,当我多次调用startScan方法时,我得到了上面的日志。

protected void startScan() {
    if (getBluetoothAdapter() != null) {
        if (getBluetoothAdapter().isEnabled()) {
            getBluetoothAdapter().startLeScan(mLeScanCallback);
            mScanStopTime = new Date().getTime() + mScanPeriod;

            mScanning = true;

            handleIntervalScanning();
        }
    }
}

protected void stopScan() {
    if (getBluetoothAdapter() != null) {
        if (getBluetoothAdapter().isEnabled()) {
            getBluetoothAdapter().stopLeScan(mLeScanCallback);
            mScanning = false;
        }
    }
}

private void handleIntervalScanning() {
    long msUntilNextStop = mScanStopTime - (new Date().getTime());

    if (msUntilNextStop > mScanPeriod)
        msUntilNextStop =  mScanPeriod;

    if (msUntilNextStop > 0) {
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                handleIntervalScanning();
            }
        }, msUntilNextStop);
    } else {
        if (getBluetoothAdapter() != null) {
            if (getBluetoothAdapter().isEnabled()) {
                if (mScanning) {
                    getBluetoothAdapter().stopLeScan(mLeScanCallback);

                    startScan();
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-09 07:12:44

这是一个老帖子,但我想我会评论一下,以防其他人需要帮助。在您的代码中,您将获得BlueToothAdapter的一个实例,并调用startscan method...but,但您并没有持久化该适配器实例。然后在您的stopscan方法中,创建一个蓝牙适配器的新实例,并调用它的stop scan。我认为当您“获取”适配器,然后使用适配器的相同实例(通过内存变量)停止扫描时,需要将适配器保存到内存变量中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30335534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档