美文网首页
2025-03-14——蓝牙相关

2025-03-14——蓝牙相关

作者: orgcheng | 来源:发表于2025-03-16 18:00 被阅读0次

一、多应用持有BluetoothGattServer实例

车机端打开了多个应用,每个应用都持有BluetoothGattServer实例

BluetoothGattServer gattServer = bluetoothManager.openGattServer(context, new BluetoothGattServerCallback() {
            @Override
            public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
                // 处理连接状态变化
                LogUtils.w("fuck","onConnectionStateChange " + status + " " + newState);
                super.onConnectionStateChange(device, status, newState);
            }

            @Override
            public void onServiceAdded(int status, BluetoothGattService service) {
                super.onServiceAdded(status, service);
                LogUtils.w("fuck", "onServiceAdded");
            }
        });

假设车机端A、B两个应用都持有BluetoothGattServer实例,A应用在前台发送BLE广播,手机端扫描到广播并连接成功,A、B两个应用都收到onConnectionStateChange回调。
但是B应用为了避免影响A应用,需要B应用仅针对自己关心的UUID做出响应。


二、BluetoothManager.openGattServer流程分析

文章跟踪openGattServer的调用流程,主要是AIDL的跨进程调用

BluetoothGattServer----->IBluetoothGatt----->GattService----->BluetoothGattBinder
最后就是调用到Native层gattServerRegisterAppNative方法

查表后找到
packages/modules/Bluetooth/android/app/jni/com_android_bluetooth_gatt.cpp


三、BluetoothManager.connectGatt流程分析

image.png

四、蓝牙广播数据

问题1:响应广播是如何被收到的?

// 我们发送广播时,如果传递了第三个参数(scanResponse),对端是如何解析的?
void startAdvertisingSet(
    AdvertisingSetParameters parameters,
    AdvertiseData advertiseData,
    AdvertiseData scanResponse,  // 第三个参数
    PeriodicAdvertisingParameters periodicParameters,
    AdvertiseData periodicData,
    int duration,
    int maxExtAdvEvents,
    AdvertisingSetCallback callback
);
# ---------------------------------------------------------------------------------
// 对端需要主动调用下面的方法:
ScanSettings scanSettings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

bluetoothLeScanner.startScan(filters, scanSettings, scanCallback);
1. 此时会向广播端发送SCAN_REQ数据包

2.当广播端收到 SCAN_REQ 后,自动通过 scanResponse 参数生成 SCAN_RSP 数据包并发送给扫描端。
此过程由 Android 系统底层协议栈处理,无需开发者干预。

3.扫描端通过 ScanCallback 的 onScanResult() 方法接收合并后的广播数据(包含初始广播和扫描响应)

问题2:BLE广播的数据为什么最大是31个字节?

广播包的格式如下,Android应用应用层能控制的数据只有Payload的AdvData,其他都是系统封装的。

广播数据包的完整格式 PDU的数据格式

另外还有PDU Type的定义:


广播报文类型

五、蓝牙信号强度RSSI计算距离

在手车互联中,有主动连接和回连两种场景:

  • 主动连接:车机端会发送BLE广播,手机检测RSSI的信号强度来决定是否弹窗连接。
  • 回连:需要车机判断手机是否在附近,可以通过发现可用的蓝牙设备及RSSI信号强度来决定用户是不是再车附近,此时需要手机和车机的蓝牙已经配对并且知道要回连的手机蓝牙地址。

代码块

相关文章

  • Android 蓝牙相关的广播

    Android 蓝牙相关的广播 监听蓝牙相关的广播并获得相关的信息,蓝牙相关的广播主要集中在BluetoothAd...

  • 蓝牙相关

    https://www.jianshu.com/p/03d617921aef IOS9 BLE 与外设交互及设备绑...

  • 蓝牙相关

    找了好久才发现的;废话不多说,分享给大家了;在需要跳转的地方添加以下代码(1) (2)配置info里面的URL设置...

  • Android实践 -- Android蓝牙设置连接

    蓝牙开发相关 使用Android Bluetooth APIs将设备通过蓝牙连接并通信,设置蓝牙,查找蓝牙设备,配...

  • Android蓝牙权限

    1. 蓝牙权限 蓝牙连接和通讯需要获取相关的蓝牙权限BLUETOOTH和BLUETOOTH_ADMIN。 蓝牙权限...

  • 蓝牙开发入门

    蓝牙开发 相关资料: 蓝牙通过网站下载蓝牙开发套件 Bluetooth 和BLE 蓝牙(Bluetooth) 一种...

  • 最近学习资料整理

    最近换了公司,将最近看的资料整理总结一下,方便以后查看 蓝牙相关 公司很多业务和蓝牙相关 入门demoiOS蓝牙开...

  • iOS蓝牙开发(一)蓝牙相关基础知识

    iOS蓝牙开发一 iOS蓝牙开发(一)蓝牙相关基础知识 蓝牙常见名称和缩写 MFI ======= make fo...

  • iOS蓝牙Bluetooth

    (一) iOS蓝牙开发蓝牙相关基础知识 蓝牙常见名称和缩写 MFI ======= make for ipad ...

  • iOS蓝牙开发(一)

    iOS蓝牙开发(一)蓝牙相关基础知识# 蓝牙常见名称和缩写## MFI ======= make for ipad...

网友评论

      本文标题:2025-03-14——蓝牙相关

      本文链接:https://www.haomeiwen.com/subject/fdvvmjtx.html