当前位置: 首页 > 知识库问答 >
问题:

是否有可能缩短扫描BLE设备的时间?

凌嘉志
2023-03-14

我有以下代码开始扫描BLE设备:

Log.i("timeChar", "Begin");
customBluetoothManager.scanLeDevice(true);

然后调用scanLeDevice(),它管理蓝牙适配器以启动BLE扫描:

public void scanLeDevice(final boolean enable) {
        mHandler = new Handler();

        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
    }

现在,通过扫描找到的每个设备的回调:

// Device scan callback.
    private BluetoothAdapter.LeScanCallback mLeScanCallback =
            new BluetoothAdapter.LeScanCallback() {
                @Override
                public void onLeScan(final BluetoothDevice device, int rssi,
                                     byte[] scanRecord) {

                    String name = device.getName();
                    if (name != null && name.compareTo(bluetoothDeviceName) == 0) {
                            Log.i("timeChar", "Device found");
                    }
                }
            };

每次我要扫描我的BLE设备(具有外围角色),大约需要11秒来检测它。。。

05-31 17:32:39.139 27545-9668/app I/timeChar: Begin
05-31 17:32:50.149 27545-27545/app I/timeChar: Device found

有没有办法减少这一时间?

共有2个答案

房泉
2023-03-14

为此,您应考虑:

>

  • 在BLE信标中设置的定义间隔。为了节省电池,您可以定义BLE信标发送的每个数据包之间的时间间隔(从100毫秒到几秒钟)。因此,首先检查信标的时间间隔是多少。

    Android操作系统中设置的指示您已收到新数据包的时间(回调功能)。如Marcin所示,您可以轻松地执行此操作:

    扫描设置=新的扫描设置。Builder(). setScanMode(扫描设置。SCAN_MODE_LOW_LATENCY). build();

  • 曾鸿振
    2023-03-14

    BLE扫描和设备广告每隔一段时间进行。如果广告之间的间隔很长,比如说一秒钟,那么android可能会错过。为了从应用程序端解决此问题:

    //global ScanSettings settings;
    ScanSettings.Builder settingBuilder = new ScanSettings.Builder();
    settingBuilder.setScanMode(SCAN_MODE_LOW_LATENCY);
    settings = settingBuilder.build();
    

    稍后将其传递给扫描方法

    mBluetoothAdapter.getBluetoothLeScanner().startScan(null, settings, mLeScanCallback);
    
     类似资料:
    • 我有3台Android设备,三星Galaxy S3手机,三星Tab4和Verizon OEM平板电脑。Verizon OEM平板电脑不支持BLE、API 17。我从android开发者网站安装了“BLE设备扫描”,并在Galaxy S3上运行。它只显示Verizon平板电脑是找到的设备。当我在三星Tab4上运行相同的应用程序时,它只显示Galaxy S3作为找到的设备。如果我只看Galaxy S3

    • 我正在创建一个Android应用程序,该应用程序使用Android Studio扫描所有附近的BLE(蓝牙低功耗)设备。 我想我已经实施了所有这些文件: https://developer.android.com/guide/topics/connectivity/bluetooth/ble-overview https://developer.android.com/guide/topics/c

    • 我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O

    • 我试图用BLE API扫描附近的蓝牙设备,但它似乎不起作用 我已经在清单中添加了权限 以下内容在创建对象时 创建扫描仪回调对象并进一步扫描 在logcat中,我只看到以下内容 这是我的app build gradle } 有人能指出我在这里遗漏了什么吗?

    • BLE(低功耗蓝牙)设备应该在不扫描到我的iPhone(应用程序)的情况下连接。 我有通过扫描QRCode得到的BLE地址。 因此,我希望在不调用(manager.scanForPeripherals(withServices:nil))的情况下连接特定的设备(我传递地址的设备),因为它将启动所有设备。 目前,当我找到我的特定设备时,我可以扫描我的BLE设备的二维码并扫描所有可用设备。我正在停止扫

    • 我的应用程序应连接到蓝牙LE设备。通常使用mBluetoothAdapter执行设备扫描。Stratescan(mLeScanCallback) 。回调为您提供有关可用设备的信息。 如果要连接到专用设备,请执行以下操作 然后 在我看来,连接到BLE设备的唯一需要是知道BLE地址,然后通过以上两个步骤连接到它。因此,如果我已经知道一个BLE地址(例如,它写在BLE设备的标签上),我就不需要执行BLE