gpt4 book ai didi

iphone - iPhone后台模式下的内部时钟

转载 作者:可可西里 更新时间:2023-11-01 05:01:18 25 4
gpt4 key购买 nike

在我的应用程序中,我想在后台模式下运行内部时钟 [当应用程序未在前台运行时]。

整个功能是这样的:

目标是让服务器时间在应用程序中使用,因为使用设备时间有时可能会导致问题。问题可能出现在有人更改了用户的 iPhone 时间等情况下。所以我按照以下方法进行操作。

-即使应用程序未运行,也会在我的应用程序后台运行内部时钟。- 每 15 分钟与服务器通信以获取实时时间并运行计时器。-如果中间网络断开,定时器将继续并计时。

我的应用程序在很大程度上取决于这个时间因素,因为这是一个票务预订系统。请帮助我实现这个或者请确认这是否可能?

我正在开发一个涉及订票系统的 iPhone 应用程序。我将我的应用程序注册为基于位置的应用程序,因为它出于某种目的使用在后台获取的用户位置。

我的问题是我需要在我的应用程序中以后台模式运行一个内部时钟。我需要在核心位置委托(delegate)方法中编写内部时钟的代码,这样内部时钟也将与位置服务一起运行。我的应用程序会被拒绝吗?这样做有什么不对吗?

我需要在我的应用程序中使用正确的时间,以便我运行这个内部时钟。我可以使用 NSDate,但这会返回设备时间。任何人都可以更改设备时间。因此,一旦有人更改,错误的时间将影响应用程序的顺利运行。请有人建议在不运行内部时钟的情况下获得正确的时间?

最佳答案

更新:很抱歉,我的原始答案不正确。当设备进入休眠状态(可能在锁定后的某个时间发生),内部 CPU 时钟停止滴答作响,并且 mach_absolute_time 也不会更新。理论上,如果您在设备进入休眠之前和唤醒之后调用它,它将返回完全相同的值。

据我所知,检查日期更改的最佳方法是 kern.boottime,它保存启动时间,并且 在系统时间更改时进行修改。除此之外,如果用户更改时间,或者如果操作系统根据手机信号塔的信息自行更改时间,则 kern.boottime 将被更新。

因此,在您的情况下,您可以根据 kern.boottime 中的修改,将您计算出的原始时间进行修改。如果您看到 kern.boottime 发生显着变化,则可能意味着设备已关闭,在这种情况下,您需要联系服务器询问航类起飞前的时间。

相关代码:

time_t getBootTimeSecs(void)
{
struct timeval boottime;
size_t size = sizeof(boottime);
int ret = sysctlbyname("kern.boottime", &boottime, &size, NULL, 0);
assert(ret == 0);
return boottime.tv_sec;
}

原始(不正确)答案:您可以使用不受用户更改日期影响的 mach_absolute_time

订票时,从服务器获取正确的日期并记录mach_absolute_time。现在,您始终可以随时调用 mach_absolute_time,计算与您最初记录的时间的差异,并显示正确的日期。

这仅在设备未关闭时有效,在这种情况下,应用重新连接到服务器以获得正确的日期是有意义的。

您还可以使用本地通知或推送通知在目标日期临近时提醒用户,即使应用未运行也是如此。

关于iphone - iPhone后台模式下的内部时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564823/

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