我遇到了一个涉及 iPhone 4S 的奇怪问题。我正在开发一个使用 iBeacons 的应用程序。下面的代码是在iPad mini、iPhone 5s 和iPhone 4s 上运行的,但是只有iPad 和5S 遇到iBeacon 时能够响应,而4S 没有任何 react 。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //start ibeacon monitoring mode
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    [self enableMonitoring];
}

- (void)enableMonitoring
{
    [self initRegion];
    [self locationManager:self.locationManager didStartMonitoringForRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

- (void) initRegion
{
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:UUID]
                                                           identifier:@"iBeacon"];
    [self.locationManager startMonitoringForRegion:self.beaconRegion];
    hasAlerted = NO;
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    NSLog(@"Beacon Found");
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    NSLog(@"Left Region");
    [self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    CLBeacon *beacon = [beacons lastObject];

    // stuff gets done here

}

4S可以毫无问题地广播iBeacons,另外2个可以找到它们。

我已经在 4S 上做了 [CLLocationManager isMonitoringAvailableForClass:[CLBeacon class]][CLLocationManager isRangingAvailable] 测试,它们没有失败。

如果这只是我们 4S 的问题,或者是一般的 4S 问题,谁能启发我?

最佳答案

我不认为您的设备有缺陷,因为我遇到了完全相同的问题!
相同的代码在 5S 上运行良好,但没有找到使用 4S 的信标。
事实证明(似乎)4S BLE 堆栈的工作方式与 5S 略有不同。

按照我编写代码的方式,直到“locationManager didDetermineState forRegion”被调用并且我确定我实际上在信标区域内时,我才开始为信标进行测距。这在 iPhone 5S 上效果很好,而且您无缘无故地不在范围内。但是在 4S 上,您永远不会收到回调!

但是,如果您通过放置更早地开始测距:

[locationManager startRangingBeaconsInRegion:beaconRegion];

在“locationManager didStartMonitoringForRegion”回调中,它就像一个冠军!

关于iphone - iPhone 4S 无法找到 iBeacon,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20328499/

10-10 01:55