物理上何时建立BLE连接?通过调用建立connection()吗?或在其后调用第一个特征?

时间:2018-10-08 12:56:47

标签: android bluetooth bluetooth-lowenergy rx-android rxandroidble

实际上,我对与“ establishconnection()”相关的其他问题和相关讨论中的答案感到困惑。由于我开始使用低能耗的BLE设备连接建立应用程序,因此我对应用程序和设备之间的物理通信建立有疑问。在我的程序中,我在读取特征之前调用establishconnection()。但是在同步之后,我总是在应用程序和设备之间遇到一些连接问题。因此,我需要更深入地检查设备的连接过程。因此,您能否从上述实际上从应用程序建立到BLE设备的物理连接的点上给我一个确切的代码点

1 个答案:

答案 0 :(得分:0)

有几种方法可以确定确切的连接时刻。这可以在几个级别上完成:

Android默认日志

通常,在连接到BLE外设时,在logcat中可以看到特定的线路:

  

D / BluetoothGatt:onClientConnectionState()-status = 0 clientIf = 6 device = 00:00:00:00:00:00

RxAndroidBle日志

可以设置RxBleLog.setLogLevel(RxBleLog.VERBOSE),这将使库内部日志可见。系统通知库已建立连接的那一刻用日志标记:

  

D / RxBle#BluetoothGatt:onConnectionStateChange newState = 2 status = 0

低级别ACL广播

建立低级别的蓝牙连接后,大多数Android操作系统都会广播信息。要访问它,必须注册BroadcastReceiver

Context context = /* your Context */;
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Log.d("Connected", "BluetoothDevice[macAddress=" + bluetoothDevice.getAddress() + ']');
    }
};
context.registerReceiver(broadcastReceiver, intentFilter);

这将触发以下日志:

  

D /已连接:BluetoothDevice [macAddress = 00:00:00:00:00:00]