Mr.Alright---为什么蓝牙有时候搜到的列表为空

前景:在开发一个ble蓝牙的项目时,碰到一个需求,就是在按下硬件设备的某一个按钮的时候,App要主动去连接硬件,当时的设计是,硬件按下按钮时,改一个特殊的名字,App一直不停的搜索,直到搜索到特殊的名字,就主动去连接

问题:如果硬件先按下按钮改变名字,再打开App,那么基本上秒连;但是如果先打开App,过一会儿再按设备按钮,那么有时要搜索好久

2021-01-30 14:30:33.461 8661-8838/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=8 mScannerId=0
2021-01-30 14:30:33.468 8661-8661/com.test.ble D/HZH: onScanStarted: start
2021-01-30 14:30:33.601 8661-8661/com.test.ble D/HZH: onScanning: scanning
2021-01-30 14:30:33.906 8661-8661/com.test.ble I/chatty: uid=10176(com.test.ble) identical 18 lines
2021-01-30 14:30:35.977 8661-8661/com.test.ble D/HZH: onScanning: scanning
2021-01-30 14:30:36.286 8661-8661/com.test.ble D/HZH: onScanning: scanning
2021-01-30 14:30:36.536 8661-8661/com.test.ble D/HZH: onScanFinished: null
2021-01-30 14:30:36.538 8661-8661/com.test.ble D/HZH: onScanFinished: null
2021-01-30 14:30:36.540 8661-8661/com.test.ble D/HZH: onScanFinished: Mi Smart Band 4
2021-01-30 14:30:36.541 8661-8661/com.test.ble D/HZH: onScanFinished: not found
2021-01-30 14:30:36.543 8661-8661/com.test.ble D/BluetoothAdapter: startLeScan(): null
2021-01-30 14:30:36.543 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:36.546 8661-8838/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=8 mScannerId=0
2021-01-30 14:30:36.553 8661-8661/com.test.ble D/HZH: onScanStarted: start
2021-01-30 14:30:36.681 8661-8661/com.test.ble D/HZH: onScanning: scanning
2021-01-30 14:30:39.609 8661-8661/com.test.ble D/HZH: onScanFinished: MI_SCALE
2021-01-30 14:30:39.611 8661-8661/com.test.ble D/HZH: onScanFinished: null
2021-01-30 14:30:39.619 8661-8661/com.test.ble I/chatty: uid=10176(com.test.ble) identical 6 lines
2021-01-30 14:30:39.621 8661-8661/com.test.ble D/HZH: onScanFinished: null
2021-01-30 14:30:39.622 8661-8661/com.test.ble D/HZH: onScanFinished: Mi Smart Band 4
2021-01-30 14:30:39.624 8661-8661/com.test.ble D/HZH: onScanFinished: null
2021-01-30 14:30:39.625 8661-8661/com.test.ble D/HZH: onScanFinished: not found
2021-01-30 14:30:39.627 8661-8661/com.test.ble D/BluetoothAdapter: startLeScan(): null
2021-01-30 14:30:39.628 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:39.629 8661-8777/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
2021-01-30 14:30:39.639 8661-8661/com.test.ble D/HZH: onScanStarted: start
2021-01-30 14:30:39.940 8661-8661/com.test.ble D/HZH: onScanStarted: scan error true
2021-01-30 14:30:39.940 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:39.942 8661-8777/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
2021-01-30 14:30:42.632 8661-8661/com.test.ble D/BluetoothAdapter: stopLeScan()
2021-01-30 14:30:42.633 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:42.633 8661-8661/com.test.ble D/BluetoothLeScanner: could not find callback wrapper
2021-01-30 14:30:42.633 8661-8661/com.test.ble D/HZH: onScanFinished: not found
2021-01-30 14:30:42.635 8661-8661/com.test.ble D/BluetoothAdapter: startLeScan(): null
2021-01-30 14:30:42.636 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:42.638 8661-8777/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
2021-01-30 14:30:42.643 8661-8661/com.test.ble D/HZH: onScanStarted: start
2021-01-30 14:30:42.944 8661-8661/com.test.ble D/HZH: onScanStarted: scan error true
2021-01-30 14:30:42.944 8661-8661/com.test.ble D/BluetoothAdapter: isLeEnabled(): ON
2021-01-30 14:30:42.947 8661-8777/com.test.ble D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0

起初发现返回的列表一直为null,以为是确实没搜到,后面突然间发现,当返回null的时候,onScanning方法根本没有回调,这就奇怪了,这就完全不是没搜到的问题了,而是根本没去搜索!

这是为何,本着看看的态度,就看了一看log

正常的时候

D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=8 mScannerId=0

异常的时候

D/BluetoothLeScanner: onScannerRegistered() - status=6 scannerId=-1 mScannerId=0

状态不对啊,id也不对,这是什么鬼?于是就追溯到了源码

D:\Sdk\sources\android-30\android\bluetooth\le\BluetoothLeScanner.java

/**
 * Application interface registered - app is ready to go
 */
@Override
public void onScannerRegistered(int status, int scannerId) {
    Log.d(TAG, "onScannerRegistered() - status=" + status
            + " scannerId=" + scannerId + " mScannerId=" + mScannerId);
    synchronized (this) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            try {
                if (mScannerId == -1) {
                    // Registration succeeds after timeout, unregister scanner.
                    mBluetoothGatt.unregisterScanner(scannerId);
                } else {
                    mScannerId = scannerId;
                    mBluetoothGatt.startScan(mScannerId, mSettings, mFilters,
                            mResultStorages, mOpPackageName, mFeatureId);
                }
            } catch (RemoteException e) {
                Log.e(TAG, "fail to start le scan: " + e);
                mScannerId = -1;
            }
        } else if (status == ScanCallback.SCAN_FAILED_SCANNING_TOO_FREQUENTLY) {
            // applicaiton was scanning too frequently
            mScannerId = -2;
        } else {
            // registration failed
            mScannerId = -1;
        }
        notifyAll();
    }
}

D:\Sdk\sources\android-30\android\bluetooth\le\ScanCallback.java

/**
 * Fails to start scan as application tries to scan too frequently.
 * @hide
 */
public static final int SCAN_FAILED_SCANNING_TOO_FREQUENTLY = 6;

原因一目了然了,系统说了,你小子搜索这么快,想累死我吗?我不搜了!

知道了吧,不要太快了,不然人家会受不了的!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值