我想开发一个应用程序,可以在不知道UUID的情况下检测到许多信标设备。然而,我找不到实现这一点的方法。我必须在代码中定义UUID。
我已经开发了一个可以与已知设备配合使用的POC。
我的视图控制器代码:
我已经开发了一个可以与已知设备配合使用的POC。
我的视图控制器代码:
-(void)setUpview
{
// Regardless of whether the device is a transmitter or receiver, we need a beacon region.
NSUUID * uid = [[NSUUID alloc] initWithUUIDString:@"78CDC73D-D678-4B35-A88A-C2E09E5B963F"];//[UIDevice currentDevice].identifierForVendor;
treasureId = @"com.eden.treasure";
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uid identifier:treasureId];
// Location manager.
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.locationManager requestAlwaysAuthorization];
}
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
[self locationManager:self.locationManager didStartMonitoringForRegion:self.beaconRegion];
[self.beaconRegion setNotifyEntryStateOnDisplay:YES];
[self.beaconRegion setNotifyOnEntry:YES];
[self.beaconRegion setNotifyOnExit:YES];
// self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
if ([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad || [[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"])
{
[self configureTransmitter];
}
else {
[self configureReceiver];
}
}
-(void)configureTransmitter
{
// The received signal strength indicator (RSSI) value (measured in decibels) for the device. This value represents the measured strength of the beacon from one meter away and is used during ranging. Specify nil to use the default value for the device.
NSNumber * power = [NSNumber numberWithInt:-63];
self.peripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:power];
// Get the global dispatch queue.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// Create a peripheral manager.
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:queue];
}
-(void)configureReceiver {
// Location manager.
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager requestAlwaysAuthorization];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
#pragma mark - CBPeripheralManagerDelegate methods
-(void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
// The peripheral is now active, this means the bluetooth adapter is all good so we can start advertising.
if (peripheral.state == CBPeripheralManagerStatePoweredOn)
{
[self.peripheralManager startAdvertising:self.peripheralData];
}
else if (peripheral.state == CBPeripheralManagerStatePoweredOff)
{
NSLog(@"Powered Off");
[self.peripheralManager stopAdvertising];
}
}
-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if(state == CLRegionStateInside)
{
NSLog(@"%@",[NSString stringWithFormat:@"You are inside region %@", region.identifier]);
}
else if(state == CLRegionStateOutside)
{
NSLog(@"%@",[NSString stringWithFormat:@"You are outside region %@", region.identifier]);
}
else
{
return;
}
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
if ([beacons count] == 0)
return;
NSString * message;
UIColor * bgColor;
CLBeacon * beacon = [beacons firstObject];
switch (beacon.proximity) {
case CLProximityUnknown:
message = [NSString stringWithFormat:@"ProximityUnknown -- %ld", (long)beacon.proximity];
bgColor = [UIColor blueColor];
break;
case CLProximityFar:
message = [NSString stringWithFormat:@"ProximityFar -- %ld", (long)beacon.proximity];
bgColor = [UIColor colorWithRed:.0f green:.0f blue:230.0f alpha:1.0f];
break;
case CLProximityNear:
message = [NSString stringWithFormat:@"ProximityNear -- %ld", (long)beacon.proximity];
bgColor = [UIColor orangeColor];
break;
case CLProximityImmediate:
default:
message = [NSString stringWithFormat:@"ProximityImmediate -- %ld", (long)beacon.proximity];
bgColor = [UIColor redColor];
break;
}
if (beacon.proximity != self.previousProximity)
{
[lblStatus setText:message];
[self.view setBackgroundColor:bgColor];
self.previousProximity = beacon.proximity;
}
}
那么有没有办法在不知道UUID的情况下检测iBeacon呢?
注意:使用与此链接广播信号(虚拟信标)相同功能的示例应用程序。
任何帮助将不胜感激。