【问题标题】:Sometimes can't find the ble device有时找不到ble设备
【发布时间】:2015-08-28 10:37:38
【问题描述】:

我正在开发 Android-Ble 。 我的问题是: 当 Ble 设备断开连接时,程序会调用 .startLeScan(callback) 来查找 Ble 设备并重新连接。 但有时,程序试图扫描但找不到任何设备。我猜这是由于 Ble 协议栈混乱造成的。 我对吗?而如果 Ble 协议栈乱了,那么会发生什么让 Ble 协议栈乱呢? 谁能给我一些建议?谢谢。

---有扫码:

private void startBLEScan() {
    if (isBLEScanStarted) {
        return; 
    }else {
        isBLEScanStarted = true;
    }
    if (mBluetoothAdapter != null) {
        boolean startResult = mBluetoothAdapter.startLeScan(mLeScanCallback);
        System.out.println("BlueToothScan: startLeScan      "+startResult);
        startBLEScanTimeoutTimer(1000 * 60);   //When scan time reach 60s , stop scan and rescan after 5s.
    }
    else {
        System.out.println("BlueToothScan: adapter is null");
    }
}

---有gatt回调.OnConnectionStateChange:

@Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status,
            int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                intentAction = ACTION_GATT_CONNECTED;
                mConnectionState = STATE_CONNECTED;
                broadcastUpdate(intentAction);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                mBluetoothGatt.discoverServices();
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                intentAction = ACTION_GATT_DISCONNECTED;
                mConnectionState = STATE_DISCONNECTED;
                if(mBluetoothGatt != null){
                    mBluetoothGatt.close();
                    mBluetoothGatt = null;
                }
                broadcastUpdate(intentAction);
            }
        }

【问题讨论】:

  • 那是什么类型的 BLE 设备?您是否尝试在连接断开时使用其他设备找到它?
  • 我已经尝试用另一部手机找到它,并且可以连接到 BLE 设备。呃.. 对不起,我不太了解那是什么类型的 BLE 设备.. .意味着它是从哪里制成的或其他的?
  • 不,是健身设备吗?大多数这些 BLE 设备在长时间不使用时会关闭。
  • 是的,但是当我失去与 BLE 设备的连接时。我无法获得任何设备。我想如果只是设备关闭我仍然可以得到其他的mac,但它不是......所以我猜一些错误的步骤会使Ble协议栈混乱。
  • 发布一些代码,我们无能为力。

标签: android bluetooth-lowenergy


【解决方案1】:

我不知道这是否是同样的问题,因为这个问题是在我更新到 Android 5.1 之后才出现的。我可以将设备连接并绑定到我的 Android,但在重新连接时,扫描不会找到任何已绑定的设备。

我的代码在 Android 5.0 中运行良好,蓝牙低功耗的唯一变化是扫描方法。现在我必须使用 BluetoothScanner 类,并且不再从 BluetoothAdapter 类调用 startLeScan 方法,因为它已被弃用。

问题可能来自数据包的长度,因为当设备绑定或未绑定时,广告名称会发生​​变化。 另一个想法是,Google 在连接已绑定的设备时会更改安全性,但通常不会影响扫描发现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多