我有一个单点触控应用程序,它有一个计时器并从服务器获取数据。收到数据后,我想在状态栏上显示通知。当应用程序处于前台时,它运行良好。当应用程序在后台时,计时器和通知都不起作用
请帮助我纠正这个问题。
我有一个单点触控应用程序,它有一个计时器并从服务器获取数据。收到数据后,我想在状态栏上显示通知。当应用程序处于前台时,它运行良好。当应用程序在后台时,计时器和通知都不起作用
请帮助我纠正这个问题。
让您的应用程序在后台运行很容易,在 info.plist 中添加用于位置更新的应用程序寄存器,为显着位置更改创建一个 CLlocation 单例寄存器,您就完成了,每次发生显着位置更改时,您的应用程序都会复活
When you have an App with registers for location updates it seems to always run in the background to a certain extent, as you get significan location changes and you get the enter/exit regions, so you app is running code or is being waken up to run code... the problem is that the UILocalnotification doesn't trigger a sound and alert consitently ( but all the calls are displayed in the notification center... ) The big problem here is that the significan location changes, and the enter/exit regions are useless if you can not notify your user reliably.... is CFUserNotificationDisplayAlert() the only solution to trigger an alert to the user... ? does it work ? will your app be rejected if you use it ?
当 iOS 应用程序转换到挂起(即后台)状态时,它会停止其计时器并禁用 locl 通知(并执行更多与内存优化相关的操作)。当您的应用程序在后台时显示用户警报的一种可能的解决方案(仅限 JB)是运行一个服务器(真正的 unix 服务器,它不会被应用程序后台处理!)并使用未记录的 CFUserNotificationDisplayAlert() 函数(只是谷歌它)。
我得到这个工作如下:(不是一个好的设计,但一个工作的)在 info.plist 中添加了位置支持,创建一个位置管理器并继续请求位置服务。在同一个循环中安排 UIlocalnotification 。
它完美地工作。:)
注意:一个问题是它会给用户一个提示,因为“这个应用程序使用你的位置,你想允许吗”
你最好的机会是通过在后台请求一个宽限期来稍微延长你的应用程序的生命周期。只要您在此时间范围内收到此消息,您就可以发布通知。
您可以通过调用 UIApplication.BeginBackgroundTask 来执行此操作。这将使您运行一点,并且您传递的方法将在您的宽限期用完之前不久被调用。