因为在iOS中 ,不同设备或应用获取到的UUID都是不一致的,但是在实际蓝牙开发过程中,会遇到扫描二维码连接蓝牙这样的需求,但是二维码中保存的数据是固定值,那么我们需要保证通过二维码中的固定值找到对应的设备连接,必然就不能通过扫描得到的UUID进行区分。
在扫描到的蓝牙serviceData数据中,获取1827中的Data
然后截取Data中的10到15位进行逆转
然后再对逆转的数据进行16进制编码,就可以得到一个固定的编码
具体代码如下:
因为需要对Data进行16进制编码,所以我们可以先对Data添加一个延展,方便进行编码
extension Data {
struct HexEncodingOptions: OptionSet {
letrawValue:Int
staticletupperCase=HexEncodingOptions(rawValue:1<<0)
}
funchexEncodedString(options:HexEncodingOptions= []) ->String{
letformat = options.contains(.upperCase) ?"%02hhX":"%02hhx"
returnmap{String(format: format, $0) }.joined()
}
}
然后在扫描到的advertisementData中调用
guard let serviceData = advertisementData[CBAdvertisementDataServiceDataKey] as? NSDictionary else {
return
}
let data = serviceData[CBUUID(string:"1827")]as?Data
let data1 =Data((data?.subdata(in:10..<16).reversed())!)
let str = data1.hexEncodedString()
然后str字符串就是我们拿到的扫描到设备的唯一编码,在不同的手机上获取到的编码也是一样的,就可以解决不同手机扫描到的蓝牙UUID不一致的问题
我们就可以将这个编码生成对应的二维码,然后使用手机扫描二维码时,读取到这个编码从扫描到的蓝牙设备中找到对应的蓝牙设备进行连接
代码贴图: