Android BLE直接通过地址连接失败

时间:2019-03-06 06:31:06

标签: android bluetooth bluetooth-lowenergy android-bluetooth

所以我有这种情况。 如果我扫描新的LE设备并连接到找到的任何设备,则可以成功连接,但是如果我将该设备地址存储在内存中,请关闭应用程序,然后再次打开,然后尝试直接在我的onConnectionStateChange中连接newState通常是BluetoothProfile.STATE_DISCONNECTED,但并非总是如此。

这似乎发生在银河s7上,但没有发生在我的其他廉价平板电脑上。

我的连接逻辑如下:

    BluetoothDevice bluetoothDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(
            device.getAddress());
    Log.i(TAG, "Found device: " + bluetoothDevice.getAddress()
            + " (" + bluetoothDevice.getName() + ") Type: " + bluetoothDevice.getType());
    bluetoothGatt = bluetoothDevice.connectGatt(context, false, new BluetoothGattCallback() { <..> }, BluetoothDevice.TRANSPORT_LE);

我的onConnectionStateChange方法看起来像这样:

        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            Log.i(TAG, "New connection state: " + newState);
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                Log.i(TAG, "Connection successful");
                new Handler(Looper.getMainLooper()).postDelayed(
                        gatt::discoverServices, DELAY_BEFORE_DISCOVERING);

            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                if (status == CONNECTION_ERROR) { // Error 133
                    Log.i(TAG, "Connection error. Trying again.");
                    connect(device);
                } else {
                    bluetoothGatt.close();
                    Log.i(TAG, "Disconnected");
                }
            }
        }

日志如下:

  

2019-03-06 08:26:20.415 5905-5905/app I/LeBluetoothDevice: Write status: true 2019-03-06 08:26:20.417 5905-7919/app I/LeBluetoothDevice: Characteristic write status: 0 2019-03-06 08:26:21.069 5905-9996/app V/FA: Inactivity, disconnecting from the service 2019-03-06 08:26:26.151 5905-7919/app D/BluetoothGatt: onClientConnectionState() - status=8 clientIf=9 device=00:0D:19:00:88:D5 2019-03-06 08:26:26.153 5905-7919/app I/LeBluetoothDevice: New connection state: 0 2019-03-06 08:26:26.154 5905-7919/app D/BluetoothGatt: close() 2019-03-06 08:26:26.155 5905-7919/app D/BluetoothGatt: unregisterApp() - mClientIf=9 2019-03-06 08:26:26.163 5905-7919/app I/LeBluetoothDevice: Disconnected

任何有关如何处理此问题的建议将不胜感激

2 个答案:

答案 0 :(得分:1)

您还可以(并且应该)在此处使用您的BluetoothGattCallback。发现服务触发器BluetoothGattCallback.onServicesDiscovered()。您应该在计划中使用该回调。

我发现最好是延迟执行重试循环。这样,当连接确实立即完全初始化时,您会获得更好的体验。立即尝试,如果回调未在2-300毫秒内触发,请重试,然后重试,以此类推,直到您觉得尝试了足够长的时间。

答案 1 :(得分:0)

好的,所以我的问题是DELAY_BEFORE_DISCOVERING大约是600毫秒。看来三星银河s7在这里至少需要1500毫秒。有了它,我每次尝试都能连接。