安卓BLE设备每30秒就会不断断开和重新连接

3

我正在按照Android BLE API的指导,尝试连接并读取设备数据。扫描、连接和读取数据都没有问题,但是问题在于连接恰好在30秒后断开,只能在短暂的时间(<10秒)内重新连接。这是我连接设备GATT服务器的代码:

 protected BluetoothGatt initGattServer(BluetoothDevice device, final ConnectionCallback callback, final DataCallback dataCallback) {
    Log.d("INIT GATT SERVER", device.getName());
    this.gatt = device.connectGatt(context, true, new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState){
            Log.d("GATT CONNECTION", "CHANGED -- status: " + status + " newState: " + newState);
            if(callback != null){
                callback.onConnectionStateChanged(newState);
            }
            gattConnectionState = newState;
            if(status == BluetoothGatt.GATT_SUCCESS){
                if(newState == BluetoothProfile.STATE_CONNECTED){
                    gatt.discoverServices();
                }
            }
        }

        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status){
            gattServices.clear();
            gattServices.addAll(gatt.getServices());
            callback.onServicesDiscovered(gatt);
        }

        @Override
        public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
            handleCharacteristicChanged(characteristic, status, dataCallback);
        }

        @Override
        public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status){
            handleCharacteristicChanged(characteristic, status, dataCallback);
        }

        @Override
        public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){
            handleCharacteristicChanged(characteristic, BluetoothGatt.GATT_SUCCESS, dataCallback);
        }
    });

    refreshDeviceCache(gatt);

    return this.gatt;
}

问题在于,我收到了意外的回调到onConnectionStateChange,其状态为BluetoothProfile.STATE_DISCONNECTED,接着是BluetoothProfile.STATE_CONNECTED。这种断开连接和重新连接的过程在服务运行期间重复发生,因此连接不够稳定。我正试图连接的设备供应商有一个应用程序来维护它的连接,但我的连接却没有。可能的原因是什么?


你想连接到哪个设备?也许该设备需要某种写入操作,否则它就会断开连接? - Emil
一个引擎诊断读取器 - 旨在监测车辆里程表、引擎状态等。链接 - Ron
BLE外设实现空闲超时是相当常见的,因为它们被设计成使用容量较小的电池长时间运行。执行任何特征读取或写入可能足以保持连接活动状态。您多久执行一次读取操作? - Mark Ch
每次连接后,之后每60秒一次。 - Ron
我不知道安卓是否有任何空闲超时。我倾向于同意Emil的评论。如果您在开发者设置中启用蓝牙HCI窥探日志记录,则可以查看制造商应用程序写入外围设备的内容(如果有),并将其复制! - Mark Ch
1个回答

1
事实证明,Mark Ch提出设备可能存在空闲超时是正确的。在这个设备的情况下,空闲超时为30秒,因此每29秒或更短时间执行读取操作可以防止断开连接。只希望他们在文档中提到了这一点!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接