繁体   English   中英

iOS无法再次找到iBeacon

[英]iOS Can not find the iBeacon again in fore ground

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

但是,如果程序仅执行startMonitoringForRegion而没有startRangingBeaconsInRegion,则会发生问题。

我的程序在我第一次启动信标硬件时可以找到信标,并且在我停止信标之后,将调用功能didExitRegion。 但是在我第二次启动信标之后,程序根本找不到(执行didEnterRegion)。 我已经等了一个小时。

我测试的硬件是带有iOS 8.1.2和radBeacon USB的iPhone 5s。 这是我的代码。

#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 APP来模拟iBeacon时,无论前景,背景或屏幕是否关闭,它都会非常快速地触发iBeacon检测APP,该APP可以在其他iOS设备上运行。 当我使用Rad Beacon USB时,仍然会失败。 我测试了所有4个Rad Beacon USB,并且发生了相同的事情。 Rad Beacon USB发送的BLE消息似乎与iOS模拟的稍有不同(我刚刚尝试过APP Broadcaster)。 iOS8在某些情况下对待它们的方式有所不同。

我的Rad Beacon USB是2.0版。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM