CLBeacon - 如何更改rssi,主要和次要?

时间:2013-12-24 14:40:58

标签: objective-c core-location ibeacon

我的问题基本上是 - 如何修改iBeacon的默认设置,如major,minor和RSSI?

2 个答案:

答案 0 :(得分:14)

根据iBeacon的含义,有不同的方法来设置这些值:

  1. 硬件iBeacons

    每个Beacon供应商都有不同的设置这些值的方法。有些通过蓝牙服务进行更改,通常使用专有的iOS或Android应用程序进行管理。 (示例包括Radius Networks'电池供电和USB信标以及TwoCanoes beacons。)Radius Networks的PiBeacon包含一张带有editable file的SD卡,其中包含标识符。像Estimote这样的其他供应商使用无法更改的固定UUID创建信标。由于没有标准机制,因此没有用于在所有信标类型上设置标识符的通用工具。

  2. iOS软件iBeacons:

    您可以使用以下代码设置这些值:

    CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major:1 minor:1 identifier:@"com.radiusnetworks.iBeaconExample"];
    NSDictionary *peripheralData = [region peripheralDataWithMeasuredPower:-55];
    [_peripheralManager startAdvertising:peripheralData];
    
  3. iOS CLBeacon

    CLBeacon类并非设计为由用户创建或修改 - 它应该由CoreLocation在检测到iBeacons时构造。也就是说,可以使用KVO语法强制写入其只读属性,如下所示:

    CLBeacon * iBeacon = [[CLBeacon alloc] init];
    [iBeacon setValue:[NSNumber numberWithInt:1] forKey:@"major"];
    [iBeacon setValue:[NSNumber numberWithInt:1] forKey:@"minor"];
    [iBeacon setValue:[NSNumber numberWithInt:-55] forKey:@"rssi"];
    [iBeacon setValue:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] forKey:@"proximityUUID"];
    NSLog(@"I constructed this iBeacon manually: %@", iBeacon);
    

    但是,如果你强迫CLBeacon类以不适合使用的方式使用,那可能意味着你做错了。

  4. 完全披露:我为Radius Networks工作。

答案 1 :(得分:1)

初始化CLBeaconRegion对象时,可以指定Major和Minor变量。看一下initWithProximityUUID:major:minor:identifier方法。

据我所知,除非您重新创建该对象,否则您无法更改其值。 Rssi表示信标的信号强度,它只是只读的,取决于环境。

这里是(文档)(https://developer.apple.com/library/iOs/documentation/CoreLocation/Reference/CLBeaconRegion_class/Reference/Reference.html#//apple_ref/doc/uid/TP40013054

的链接