iOS下的altBeacons主要和次要

有没有办法找出altBeacon的主要和次要的价值? 我正在使用这个库( https://github.com/CharruaLab/AltBeacon )来检测附近的BLE设备(不pipe它是否是信标)。 信标被发现,我知道他们的uuids。 我可以使用iOS CoreBluetooth框架提取主要和次要值吗?

更新:代码似乎很好。 看起来像找出主要或未成年人请求信标数据的唯一方法,因为它是在下面接受的答案中完成的。 但是信标本身并不一定会在这种情况下回应你。

仅限iBeacon:


覆盖下面的CLLocationManager委托方法,当你能够检测到信标时,这个方法会被调用。

 -(void)locationManager:(CLLocationManager*)manager didRangeBeacons:(NSArray*)beacons inRegion:(CLBeaconRegion*)region { // Beacon found! CLBeacon *foundBeacon = [beacons firstObject]; // You can retrieve the beacon data from its properties NSString *uuid = foundBeacon.proximityUUID.UUIDString; NSString *major = [NSString stringWithFormat:@"%@", foundBeacon.major]; NSString *minor = [NSString stringWithFormat:@"%@", foundBeacon.minor]; } 

要使用Core位置框架检测信标,您需要在viewDidLoad方法中添加下面的代码。

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // Initialize location manager and set ourselves as the delegate self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; // Create a NSUUID with the same UUID as the broadcasting beacon NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]; // Setup a new region with that UUID and same identifier as the broadcasting beacon self.myBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.app.identifier"]; // Tell location manager to start monitoring for the beacon region [self.locationManager startMonitoringForRegion:self.myBeaconRegion]; // Check if beacon monitoring is available for this device if (![CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Monitoring not available" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show]; } } 

对于蓝牙设备:


用两个CBCentralManagerDelegateCBPeripheralDelegate扩展视图控制器

viewDidLoad创buildCBCentralManager对象。

 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 

并覆盖下面的方法( scan方法除外):

 - (void)centralManagerDidUpdateState:(CBCentralManager *)central { if (central.state != CBCentralManagerStatePoweredOn) { return; } // The state must be CBCentralManagerStatePoweredOn... // ... so start scanning [self scan]; } - (void) scan { // UUID for peripheral services [self.centralManager scanForPeripheralsWithServices:[NSArray arrayWithObject:[CBUUID UUIDWithString:@"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX"]] options:nil]; NSLog(@"Scanning started"); } - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { NSLog(@"Discovered %@ at %@", peripheral.name, RSSI); if (self.discoveredPeripheral != peripheral) { // Save a local copy of the peripheral, so CoreBluetooth doesn't get rid of it self.discoveredPeripheral = peripheral; // And connect NSLog(@"Connecting to peripheral %@", peripheral.UUID); [self.centralManager connectPeripheral:peripheral options:nil]; } } - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { NSLog(@"Peripheral Connected"); // Stop scanning [self.centralManager stopScan]; NSLog(@"Scanning stopped"); // Make sure we get the discovery callbacks peripheral.delegate = self; [peripheral discoverServices:nil]; }