4

私のアプリは Bluetooth LE ペリフェラルとして実行されており、Advertisement で数バイトのカスタム データを送信しようとしています。

func btStartBroadcasting(peripheral: CBPeripheralManager!) {

    // create an array of bytes to send
    var byteArray = [UInt8]()
    byteArray.append(0b11011110); // 'DE'
    byteArray.append(0b10101101); // 'AD'

    // convert that array into an NSData object
    var manufacturerData = NSData(bytes: byteArray,length: byteArray.count)

    // define a UIUD for the service
    let theUUid = CBUUID(NSUUID: uuid)

    // build the bundle of data
    let dataToBeAdvertised:[String: AnyObject!] = [
        CBAdvertisementDataLocalNameKey : "I wish this worked",
        CBAdvertisementDataManufacturerDataKey : manufacturerData,
        CBAdvertisementDataServiceUUIDsKey : [theUUid],
    ]

    peripheral.startAdvertising(dataToBeAdvertised)

}

しかし、CBAdvertisementDataManufacturerDataKey のデータ セットが取り除かれ、無線で送信されないようです。私は、Apple のドキュメントとオンラインでこれについて見つけることができるすべてのスクラップを読みました。CBAdvertisementDataLocalNameKey と CBAdvertisementDataServiceUUIDsKey のみがサポートされているため、Core Bluetooth はデータを無視するというのがコンセンサスのようです。上記はコンパイルして正常に実行され、BT スキャナー アプリで「これが機能することを願っています」が、カスタム データの 2 ビットが機能していないようです。

これを回避する方法はありますか? CoreBluetooth または私が見逃している完全にばかげたものに受け入れられる代替手段はありますか?

ありがとう、

ダン

4

2 に答える 2

2

送信するバイト数が多すぎることが問題である可能性があります。

Advertising パケットのデータ長は、仕様上 31 バイトに制限されています。あなたの例から、文字列にはすでに 18 バイトありますが、UUID には 16 バイトがあるため、すでに多すぎます。

于 2015-03-30T06:43:22.347 に答える