代码之家  ›  专栏  ›  技术社区  ›  MW2023

如果扫描没有发现什么,为什么我没有收到回拨?

  •  0
  • MW2023  · 技术社区  · 7 年前

    在我的应用程序中,我希望一个看门狗经常醒来,检查我们是否连接到设备。我还希望用户现在可以按一个按钮进行连接。检查我们是否已经连接,并且驳回请求就足够简单了。但是,如果当前扫描正在进行,我也不想启动扫描。所以我有一个方法可以像这样启动扫描:

    void scanLeDevice(final boolean enable) {
        if (enable) {
            //Will stop the scanner in given amount of milliseconds
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mLEScanner.stopScan(mScanCallback);
                }
            }, SCAN_PERIOD);
    
            mLEScanner.startScan(filters, settings, mScanCallback);
            isScanning = true;
            Log.i("BLE_Service_Comm", "Scanning...");
        } else {
            mLEScanner.stopScan(mScanCallback);
            Log.i("BLE_Service_Comm", "Scanning stopped");
        }
    }
    

    请注意,我将“Isscanning”设置为“true”。如果我收到任何类型的回调,我会确保“Isscanning”为假:

    private ScanCallback mScanCallback = new ScanCallback() {
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                isScanning = false;
                Log.i("BLE_Service_Comm", "Scan callback type " + String.valueOf(callbackType));
                Log.i("BLE_Service_Comm", "Scan callback " + result.toString());
                BluetoothDevice btDevice = result.getDevice();
                Log.i("BLE_Service_Comm", "Scan callback address " + btDevice.getAddress());
                connectToDevice(btDevice);
            }
    
            //Honestly don't know when it would return a "batch" like this
            @Override
            public void onBatchScanResults(List<ScanResult> results) {
                isScanning = false;
                Log.i("BLE_Service_Comm", "Batch results");
                for (ScanResult sr : results) {
                    Log.i("BLE_Service_Comm", sr.toString());
                }
            }
    
            @Override
            public void onScanFailed(int errorCode) {
                isScanning = false;
                Log.e("BLE_Service_Comm", "Scan failed with Error Code: " + errorCode);
            }
        };
    

    一旦我连接,我就可以找到我想要的关贸总协定概况,一切都很好。当我的自动定时器唤醒,或用户按下“连接”按钮,设备已连接或“正在扫描”为真时,它会忽略该请求。

    但是如果我的扫描 找到一个设备,mscancallback永远不会运行,“isscanning”永远保持不变。在这种情况下,计时器醒了,或者用户按“connect”不会做任何事情,因为我会看到“isscanning”是真的。

    我是不是错过了什么?有没有一种方法可以让scanCallback告诉您扫描已完成,但未找到任何内容?我的延迟运行方法是否可以在扫描结束后结束扫描?时间段有什么问题吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   MW2023    7 年前

    结果我只需要在postdelayed runnable中将“isscanning”设置为false。