ios - 在 iPhone 锁定和休眠时测距和监控信标

标签 ios objective-c iphone ibeacon beacon

所以我正在创建一个 iOS 应用程序,我正在后台寻找信标。一旦我的 iPhone 唤醒,它就可以正常工作,即使 iPhone 被锁定,它也能继续工作……但是 iPhone 必须仍然处于唤醒状态。一旦 iPhone 进入休眠状态,我的应用程序会再运行大约 10 次,然后停止。如果您唤醒 iPhone,它会再次开始测距。

我也尝试过监控,但没有成功。

谁能告诉我这是否可能?我到处搜索,找不到答案!请在下面找到我的信标方法(在 AppDelegate 中)

 - (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];
}

感谢任何帮助 谢谢 索尼娅

最佳答案

唤醒手机的方法有一种。如果您的应用属于信标区域,那么,

- (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");
}

希望这对你有用。

关于ios - 在 iPhone 锁定和休眠时测距和监控信标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376400/

相关文章:

iphone - 按下 TableView 时单击按钮以记住值

ios - 如何为 UICollectionView 创建 'sticky' 页脚?

ios - 从后台返回时如何保留 UIView Controller 的状态

ios - 在类别中递归反转 NSString

iphone - Xcode4 模板现在在 iVars 上使用下划线?

iphone - UIScrollView 自定义分页大小

iphone - 如何使用 Swift 编程在 iOS 8 中退出应用程序并返回主屏幕

ios - WKWebview 无法正确加载某些网站

iOS 应用程序的 PHP is_uploaded_file 失败

objective-c - 无法在 iOS 的 UIWebView 中滚动