蓝牙sdp协议源码解析

本文介绍了蓝牙服务发现协议(SDP)的基本概念,并详细解析了Android蓝牙SDP协议的源码实现,包括关键代码路径、服务获取流程及如何在应用中响应蓝牙服务信息。
摘要由CSDN通过智能技术生成

1,概念

1.1 SDP协议

全称:Service Discovery Profile服务发现协议

使用场景:蓝牙设备之间的那些蓝牙服务可以使用

协议知识:

    并没有客户端和服务端

1.2 代码路径

packages\apps\Bluetooth\src\com\android\bluetooth\sdp

    SdpManager.java

2,代码解析

private boolean mDiscoveryInProgress = false;
BluetoothDevice mDevice;

mDiscoveryInProgress = mDevice.fetchUuidsWithSdp();

具体的代码也很简单,就不详细列出了,流程如下



首先看下RemoteDevices的fetchUuids方法,

void fetchUuids(BluetoothDevice device) {
        if (mSdpTracker.contains(device)) return;
        mSdpTracker.add(device);

        Message message = mHandler.obtainMessage(MESSAGE_UUID_INTENT);
        message.obj = device;
        mHandler.sendMessageDelayed(message, UUID_INTENT_DELAY);

        mAdapterService.getRemoteServicesNative(Utils.getBytesFromAddress(device.getAddress()));
    }

该方法首先发送一个延迟消息,延迟6s钟

private static final int UUID_INTENT_DELAY = 6000;

然后调用getRemoteServicesNative方法获取蓝牙服务,如果找到服务如何反馈呢?

流程图如下:



void devicePropertyChangedCallback(byte[] address, int[] types, byte[][] values) {
        Intent intent;
        byte[] val;
        int type;
        BluetoothDevice bdDevice = getDevice(address);
        DeviceProperties device;
        if (bdDevice == null) {
            device = addDeviceProperties(address);
            bdDevice = getDevice(address);
        } else {
            device = getDeviceProperties(bdDevice);
        }

        for (int j = 0; j < types.length && device != null; j++) {
            type = types[j];
            val = values[j];
            if(val.length <= 0)
                errorLog("devicePropertyChangedCallback: bdDevice: " + bdDevice
                        + ", value is empty for type: &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值