android Bluetooth UUID和SDP

UUID是定义了一个对应的服务在蓝牙设备上。
比如蓝牙耳机有语音服务,打印机有打印服务,他们的服务都有他们相应的标准UUID。

当你调用BluetoothDevice.fetchUUidsWithSdp()的时候,你的BroadcastReceiver将会收到一个ACTION_UUID的Intent,从它里面能获取设备和服务的UUID。

当你调用方法:

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
BluetoothServerSocket serverSocket = adapter.listenUsingRfcommWithServiceRecord("YourHumanReadableServiceName", uuid);

这个时候你就是设置了你自己的UUID,android
蓝牙API会创建SDP-entry(蓝牙sdp协议相关内容),它是由你设置的UUID和name(”YourHumanReadableServiceName”)组成。
然后其他设备就能够检索这个SDP-entry。

现在可以让一个蓝牙客户端连接到你的BluetoothServerSocket。如果你想要连接到ServerSocket,可以按照如下做法:

/ you will most likely already have this instance from a discovery or paired device 

//list
BluetoothDevice serverDevice = adapter.getRemoteDevice(bluetoothMacAddress);
// connect to your ServerSocket using the uuid
BluetoothSocket socket = serverDevice.createRfcommSocketToServiceRecord(uuid);
socket.connect();

对于上面的代码,android将要做大部分的工作,它会检测SDP-Records在remote device,然后
查询和你service UUID相关的bluetooth channel,然后用这些信息connect

举个例子:
UUID相当于一个网络端口号,不过它和网络端口号不一样的地方是蓝牙端口号是动态的被SDP(service discovery protocol)分配的,每个UUID都会给一个“端口号”。
其他的设备获取服务(BluetoothDevice.fetchUUidsWithSdp())的时候,是首先请求SDP服务(它用一个保留的UUID标示),来获取在当前设备上的可用service,这些service都有唯一对应的UUID,其实就是通过

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
BluetoothServerSocket serverSocket = adapter.listenUsingRfcommWithServiceRecord("YourHumanReadableServiceName", uuid);

方法注册的。

蓝牙UUID定义:

唯一标识信息(uniquely identifying information),它标示了在蓝牙设备中的一个唯一的服务。蓝牙协议标准定义了一个
BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
比如:healthcare sensors能提供一个service,它会用一个确定的标示码来替代BASE_UUID的前8个数字。
例如:一个device提供了RFCOMM connection,它的标识码是0x0003. 那么整合后的整个UUID就是00030000-0000-1000-8000-00805F9B34FB
蓝牙协议定义标准的UUID service见网站: defines some common UUIDs
如果你要创建自己的service,不要使用这些保留的UUID。你可以用web网站(http://www.uuid.online/)产生一个随机的UUID,然后客户端和服务端使用相同的UUID进行连接。

参考网站:
https://stackoverflow.com/questions/13964342/android-how-do-bluetooth-uuids-work?rq=1

https://stackoverflow.com/questions/30813854/how-do-bluetooth-sdp-and-uuids-work-specifically-for-android

https://developer.android.com/guide/topics/connectivity/bluetooth.html#DiscoveringDevices

你可能感兴趣的:(android,应用)