iOS无法在前台findiBeacon

嗨〜我正在学习使用CLLocationManager来检测iBeacon。 我读了这篇文章: http : //developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html它说,startRangingBeaconsInRegion将使系统扫描灯塔每一秒。 我testing,这是正确的。

但是,如果程序只执行startMonitoringForRegion而不是startRangingBeaconsInRegion,则会出现问题。

我的程序可以在第一次启动信标硬件的时候find信标,在停止信标后,调用didExitRegion函数。 但是当我第二次启动信标后,程序根本找不到它(执行didEnterRegion)。 我等了一个小时。

我用来testing的硬件是带iOS 8.1.2的iPhone 5和radBeacon USB。 这是我的代码。

#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController () <CLLocationManagerDelegate> @property (retain, nonatomic) IBOutlet UITextView *textView; @property (strong, nonatomic) NSMutableString *myLog; @property (strong, nonatomic) CLLocationManager *locationManager; @property (strong, nonatomic) CLBeaconRegion *beaconRegion; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self startBeaconMonitoring]; } - (void)startBeaconMonitoring { _locationManager = [[CLLocationManager alloc] init]; _locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; _locationManager.delegate = self; [_locationManager performSelector:@selector(requestAlwaysAuthorization)]; [self userGeofencingPreferencesWereUpdatedWithNotification:nil]; [self updateLogWithString:@"start the app"]; } - (void) userGeofencingPreferencesWereUpdatedWithNotification: (NSNotification *) notification { if (1) { NSUUID *proximityUUID = [[NSUUID UUID] initWithUUIDString:@"EEF45689-BBE5-4FB6-9E80-41B78F6578E2"]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID identifier:@"1"]; _beaconRegion.notifyEntryStateOnDisplay = YES; [_locationManager startMonitoringForRegion:_beaconRegion]; //[_locationManager startRangingBeaconsInRegion:beaconRegion]; //[_locationManager stopUpdatingLocation]; } } - (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { [self updateLogWithString:@"enter"]; NSLog(@"enter"); } - (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { [self updateLogWithString:@"exit"]; NSLog(@"exit"); } - (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { //NSLog(@"range"); } - (void)dealloc { [_textView release]; [_myLog release]; [_locationManager release]; [_beaconRegion release]; [super dealloc]; } - (NSMutableString *)myLog { if (!_myLog) { _myLog = [[NSMutableString alloc] init]; } return _myLog; } - (void) updateLogWithString:(NSString*)newLog { NSDate *now = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"hh:mm:ss"; [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; NSString * logWithTime = [NSString stringWithFormat:@"%@---%@\n",[dateFormatter stringFromDate:now], newLog]; [self.myLog appendString:logWithTime]; self.textView.text = self.myLog; [dateFormatter release]; } @end 

我偶然发现了一些东西,解决了我的问题。 当我使用名为Broadcaster的iOS应用程序来模拟iBeacon时,它会非常快速地触发iBeacon检测应用程序,而不pipe在前景,背景或屏幕closures的情况下,都会在另一个iOS设备上运行。 当我使用Rad Beacon USB时,仍然失败。 我testing了我所有的4个Rad Beacon USB,同样的事情发生。 似乎由Rad Beacon USB发送的BLE消息与iOS模拟的(我刚刚尝试过APP广播器)有些不同。 和iOS8在一些情况下对待他们不同。

我的Rad Beacon USB是2.0版本。