【问题标题】:Ranging and Monitoring Beacons while iPhone is locked and sleeping在 iPhone 锁定和睡眠时测距和监控信标
【发布时间】:2015-09-03 21:43:38
【问题描述】:

所以我正在创建一个 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];
}

感谢任何帮助 谢谢 索尼娅

【问题讨论】:

    标签: ios objective-c iphone ibeacon beacon


    【解决方案1】:

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

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

    希望这对你有用。

    【讨论】:

    • 感谢磨坊!这可以在 iPhone 处于睡眠状态时保持范围,但通知不会唤醒 iPhone。我必须按下主页按钮才能唤醒它,然后我会在锁定屏幕上收到本地通知。
    • 不客气。如果您认为它对您有用,请不要忘记将最有助于解决问题的答案标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2020-06-11
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多