我的问题基本上是 - 如何修改iBeacon的默认设置,如major,minor和RSSI?
答案 0 :(得分:14)
根据iBeacon的含义,有不同的方法来设置这些值:
硬件iBeacons
每个Beacon供应商都有不同的设置这些值的方法。有些通过蓝牙服务进行更改,通常使用专有的iOS或Android应用程序进行管理。 (示例包括Radius Networks'电池供电和USB信标以及TwoCanoes beacons。)Radius Networks的PiBeacon包含一张带有editable file的SD卡,其中包含标识符。像Estimote这样的其他供应商使用无法更改的固定UUID创建信标。由于没有标准机制,因此没有用于在所有信标类型上设置标识符的通用工具。
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];
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
类以不适合使用的方式使用,那可能意味着你做错了。
完全披露:我为Radius Networks工作。
答案 1 :(得分:1)
初始化CLBeaconRegion对象时,可以指定Major和Minor变量。看一下initWithProximityUUID:major:minor:identifier方法。
据我所知,除非您重新创建该对象,否则您无法更改其值。 Rssi表示信标的信号强度,它只是只读的,取决于环境。
的链接