use*_*511 15 objective-c ios bluetooth-lowenergy ibeacon
我正在创建一个应用程序,它可以获取范围内所有BLE设备的UUID.我已经在Android中运行良好,它给我的广告数据作为字节数组.现在我想在iOS中做同样的事情.
我正在运行扫描并且它正在检测设备,并且在回调中有一个名为advertisementData的NSDictionary.但其中唯一的信息如下:
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = jaalee;
kCBAdvDataTxPowerLevel = 0;
Run Code Online (Sandbox Code Playgroud)
我是否正确地认为我应该获得整个广告包?如果没有,我怎么能得到它?
dav*_*ung 18
不幸的是,iOS不允许您访问原始广告数据.我写了一篇博客文章来证明这一点.虽然这篇文章专门针对iBeacons,但它适用于任何BLE广告.
编辑:为了澄清,您可以读取非iBeacon广告的原始字节.只有iBeacon广告才隐藏其字节CoreLocation.请参阅此处:使用iOS获取蓝牙LE扫描响应数据
等效的OSX CoreLocation方法确实允许这样做,因此它可能是iOS上的故意安全或省电限制.
meg*_*bri 15
基于Apple iOS的官方文档和我的个人经验:
是的,iOS不允许您访问RAW广告数据.
但
如果您打算将信息放入广告包并从iOS应用程序中读取它们而不连接外围设备,则可以这样做.这里描述如何:
1)在外围固件中,您必须在广告数据包中插入制造商特定数据,数据类型为GAP_ADTYPE_MANUFACTURER_SPECIFIC (0xFF)请记住,在制造商特定数据中,前2个八位字节包含公司标识符代码,后跟附加的制造商特定数据
2)在iOS中
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Run Code Online (Sandbox Code Playgroud)
您可以使用键在advertiseData词典中查看制造商特定数据:
CBAdvertisementDataManufacturerDataKey
Run Code Online (Sandbox Code Playgroud)
3)如果您希望在您的应用程序中收到外围设备发送到iOS的每个广告包的回叫通知,请记住将扫描选项更改为YES.看看这篇文章:核心蓝牙 - 范围内设备的不断RSSI更新
在我的博客文章中很快就会有一个教程:http://www.megabri.com/
| 归档时间: |
|
| 查看次数: |
32513 次 |
| 最近记录: |