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: &