美文网首页iOS上架
iOS扫描蓝牙外设时不同手机读取到的UUID不一致问题

iOS扫描蓝牙外设时不同手机读取到的UUID不一致问题

作者: i_iOS | 来源:发表于2020-07-02 10:44 被阅读0次

    因为在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不一致的问题

    我们就可以将这个编码生成对应的二维码,然后使用手机扫描二维码时,读取到这个编码从扫描到的蓝牙设备中找到对应的蓝牙设备进行连接

    代码贴图:

    相关文章

      网友评论

        本文标题:iOS扫描蓝牙外设时不同手机读取到的UUID不一致问题

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