2015-09-03 32 views
2

所以我创建了一个iOS应用程序,并且我在后台为信标做准备。一旦我的iPhone保持清醒状态,它即可正常工作,即使iPhone处于锁定状态,它仍可继续工作......但iPhone仍必须保持清醒状态。一旦iPhone进入睡眠状态,我的应用程序的范围会再增加10次,然后停止。如果您唤醒iPhone,它会再次开始测距。iPhone锁定和睡眠时测距和监测信标

我试过监控,但没有运气。

任何人都可以告诉我,如果这甚至可能吗?我到处搜索,无法找到答案!请在下面找到

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

    self.locationManager = [[CLLocationManager alloc] init]; 

    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [self.locationManager requestAlwaysAuthorization]; 
    } 

    self.locationManager.delegate = self; 
    self.locationManager.pausesLocationUpdatesAutomatically = NO; 

    [self.locationManager startUpdatingLocation]; 
    return YES; 
} 

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 
    if(beacons.count > 0) { 
     CLBeacon *nearestBeacon = beacons.firstObject; 

     if (nearestBeacon.proximity == CLProximityImmediate || nearestBeacon.proximity == CLProximityNear) { 
      NSLog("Beacon detected"); 
     } 
    } 
} 

- (void)startRangingBeacons { 
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:@"EBEFD083-70A2-47C8-9837-E7B5634DF525" identifier:@"receptionBeacon"]; 
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion]; 
} 

我的信标方法(这是在AppDelegate中)任何帮助表示赞赏 感谢 索尼娅

回答

1

有清醒手机的一种方式。如果您的应用程序属于beacon区域,则

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 

上述方法会自动调用。因此,您需要放置一些本地通知,例如“您靠近信标区”以唤醒电话。 但是你必须重新进入该地区。

一旦你的应用程序在该地区写入下面的代码重新启动信标过程中输入,

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion]; 
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] 
             beginBackgroundTaskWithExpirationHandler:^{ 
     NSLog(@"End of tolerate time. Application should be suspended now if we do not ask more 'tolerance'"); 
    [[UIApplication sharedApplication] endBackgroundTask:UIBackgroundTaskInvalid]; 
}]; 

if (bgTask == UIBackgroundTaskInvalid) 
{ 
    NSLog(@"This application does not support background mode"); 
} else { 
    //if application supports background mode, we'll see this log. 
    NSLog(@"Application will continue to run in background"); 
} 

希望这会为你工作。

+0

感谢一家工厂!这样可以在iPhone处于睡眠状态时保持范围,但通知不会唤醒iPhone。我必须按回家按钮才能唤醒它,然后在我的锁屏上获得本地通知。 –

+0

不客气。如果您认为它适合您,请不要忘记标记接受的答案,这对解决问题最有帮助。 – Paddy