gpt4 book ai didi

ios - 如何在后台以固定时间间隔重启 CoreBluetooth 管理器实例

转载 作者:行者123 更新时间:2023-11-29 12:51:56 26 4
gpt4 key购买 nike

我正在开发一个使用 CoreBluetooth 的 iOS 应用程序,我在应用程序背景中遇到一个问题。

iOS应用一般无法长期后台运行。 (例如,按下 HomeButton。切换其他应用程序)但我的应用程序设置为“使用蓝牙 LE 配件”作为 BackGroundMode,因此我可以在后台监视区域。
我在 didEnterRegion 中实现了 startRangingBeaconsInRegion。
当进入一个区域时,Ranging 区域将被启动,并在大约 10 秒后由 iOS 停止。

但我想始终在后台使用测距。因为我的应用程序只使用一个 UUID 来检测超过 20 个信标(20 意味着 startMonitoringForRegion 的限制),我想知道一个区域有多少个信标。
(关于只使用一个UUID的原因,请看这个tips。
iBeacon / Bluetooth Low Energy (BLE devices) - maximum number of beacons .)

所以我在考虑在后台以固定间隔重新启动 CoreBluetooth 管理器实例的方法。如果我可以交替执行 didEnterRegion -> didRangeBeacons-> reboot -> didEnterRegion -> didRangeBeacons -> reboot -> ...,我可以以固定的时间间隔检查该区域中的信标。
也许我需要后台获取...我稍后再试。
如果您知道这种方式是否可用,请告诉我。
或者如果您有任何建议,请告诉我,我会尝试的。

更新于 2014/03/07 17:45

BackGround fetch 将在 UNSTABLE 时间间隔触发。所以这种方式不是解决方案...

最佳答案

您不需要为背景模式设置该要求。您可以尝试在 applicationDidEnterBackground: 上调用 startBackgroundTask

- (void)startBackgroundTask {
if(bgTask != UIBackgroundTaskInvalid){
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

NSLog(@"your time is over");
//you can call start once again to get more time
}];
}

bgTaskUIBackgroundTaskIdentifier bgTask;

我唯一担心的是,根据我的观察,要获得另一次后台执行时间,用户必须触摸屏幕才能使屏幕发光(屏幕可以锁定)。为确保您的代码在后台运行,您可以设置一个计时器并定期在控制台上记录一条消息(例如系统在后台执行时为您提供的剩余时间 [UIApplication sharedApplication].backgroundTimeRemaining 或重启蓝牙)。据我所知,这种 problems 是很常见的方法。 .

关于ios - 如何在后台以固定时间间隔重启 CoreBluetooth 管理器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com