ios - 在 iOS 蓝牙外设上查找 TxPower

标签 ios swift bluetooth bluetooth-lowenergy core-bluetooth

我正在构建一个 iOS 应用程序(在 Swift 中),它既充当 Core Bluetooth 外围设备又充当中央设备。我需要确定外围设备的 txPower,但我不一定需要将它发送到其他设备的中央设备(尽管那会很棒);我很乐意在发送设备本身上确定外围设备的 txPower。

我知道我可以从制造商特定数据中确定 txPower,但我一直无法弄清楚如何读取我设备的制造商特定数据,而且我的中央处理器获取的广告数据只包括外围设备的 UUID,而不是制造商具体数据。

这是我设置外围设备的方式:

peripheral = CBPeripheralManager(delegate: self, queue: nil)
myService = CBMutableService(type: CBUUID(string: "109F17E4-EF68-43FC-957D-502BB0EFCF47"), primary: true)
peripheral.addService(myService)

这是我设置中心的方式:

centralManager.scanForPeripheralsWithServices([myCustomServiceUUID], options: nil)

然后在peripheralManagerDidUpdateState中:

    if peripheral.state == CBPeripheralManagerState.PoweredOn {

        self.peripheral.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [myService.UUID] ])}

... 在 centralManagerDidUpdateState 中:

    if central.state == CBCentralManagerState.PoweredOn {

        centralManager.scanForPeripheralsWithServices([myCustomServiceUUID], options: [
            CBCentralManagerScanOptionAllowDuplicatesKey : NSNumber(bool: true)
            ])}

didDiscoverPeripheral 委托(delegate)中生成的 advertisementData NSDictionary 是:

["kCBAdvDataServiceUUIDs": (
"109F17E4-EF68-43FC-957D-502BB0EFCF47"), "kCBAdvDataIsConnectable": 1]

同样,任何允许我在外围设备的广告数据包中添加制造商特定数据,或允许我读取外围设备的制造商特定数据或发送设备上的 txPower 的解决方案都非常棒。非常感谢!

最佳答案

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

使用此方法,您可以获取外设正在广告的所有数据。

尝试查看您得到的响应。这将允许您读取数据。

NSString * abc = [RSSI stringValue] ;

NSLog(@" \n I see an advertisement with \n identifer: %@, \n state: %@ , \n name: %@, \n services: %@, \n RSSI : %@ \n ,\n description: %@ \n",
          [peripheral identifier],
          [peripheral state],
          [peripheral name],
          [peripheral services],
          abc,
          [advertisementData description]);

在 advertisementData description log 中,您将获得具有如下描述的值的键:

{
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataLocalName = givenName;
    kCBAdvDataManufacturerData = <given data>;
    kCBAdvDataServiceUUIDs = (0536);
    kCBAdvDataTxPowerLevel = some value ;
}

希望你得到了你正在寻找的东西。

txpower 是您将在 CBAdvertisementDataTxPowerLevelKey 下从设备上发布的内容。找这个

CB_EXTERN NSString * const CBAdvertisementDataTxPowerLevelKey;

关于ios - 在 iOS 蓝牙外设上查找 TxPower,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419708/

相关文章:

android - 寻找带有图像识别库的AR

ios - 在解析中更改密码

ios - 在 SQLite.swift 中创建数据库后插入初始数据

ios - 如何在 Swift 3 中从组件创建日期

swift - 类型 'Any' 没有下标成员

java - Android - 以编程方式通过蓝牙发送图像

ios - Swift 3 - 使用 API 调用的最新方法

ios - 从 Objective C++ 调用时,OpenCv inRange 函数的行为不同

java - 通过蓝牙打印机打印pdf文件

.net - Windows上的蓝牙开发