问题标签 [ios-background-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
94673 浏览

ios - 有没有办法检查iOS应用程序是否在后台?

我想检查应用程序是否在后台运行。

在:

0 投票
1 回答
2459 浏览

ios - 将应用程序保持在后台模式以持续更新位置

我的项目正在使用 CLLocationManager 对象,通过 locationManager:didUpdateToLocations 接收更新:

即使我的应用程序在后台,我也想要这些更新。因此,在 info.plist 中,我将“必需的后台模式”列表设置为应用程序寄存器以进行位置更新。

但是我的测试表明它没有收到后台状态的更新。

但是,我不确定我对背景状态/挂起状态的理解是否正确。这就是我认为它的工作原理:

我想这就是它不起作用的原因。但是,如果将 info.plist 设置为“应用程序注册位置更新”并不能阻止应用程序达到挂起状态,那么我该如何实现呢?

按主页按钮和按锁定按钮有什么区别(如果有)?我的意思是在国家层面。

我已阅读本指南的相关部分:http ://www.raywenderlich.com/29948/backgrounding-for-ios

我还是 IOS 新手,所以我可能忽略了一些东西。

0 投票
7 回答
33112 浏览

ios - 后台定位服务在 iOS 7 中不起作用

我最近升级了我的 iOS 设备以使用 iOS 7。我们正在开发的应用程序之一使用后台定位服务来跟踪设备位置,我们所有的测试人员都报告说该应用程序似乎不再在 iOS 下在后台进行跟踪7.

我们已经验证在设备的设置中启用了应用程序的后台,并且之前的构建在 iOS 6 下完美运行。即使设备被循环,应用程序也会在位置更新后重新启动。

在 iOS 7 下是否需要做其他事情才能使这项工作?

0 投票
9 回答
96883 浏览

ios - 定期 iOS 后台位置更新

我正在编写一个需要高精度和低频率的后台位置更新的应用程序。解决方案似乎是一个后台 NSTimer 任务,它启动位置管理器的更新,然后立即关闭。之前有人问过这个问题:

如何在我的 iOS 应用程序中每 n 分钟更新一次后台位置?

应用程序进入后台后每 n 分钟获取一次用户位置

iOS 不是典型的后台位置跟踪计时器问题

具有“位置”背景模式的 iOS 长时间运行的后台计时器

基于位置追踪的iOS全时后台服务

但我还没有得到一个最低限度的例子。在尝试了上述接受的答案的每一种排列之后,我把一个起点放在一起。进入后台:

和委托方法:

当前的行为是backgroundTimeRemaining从 180 秒递减到零(在记录位置时),然后执行到期处理程序并且不会生成进一步的位置更新。如何修改上述代码以无限期地在后台接收定期位置更新

更新:我的目标是 iOS 7,似乎有一些证据表明后台任务的行为不同:

从后台任务启动 iOS 7 中的位置管理器

0 投票
1 回答
613 浏览

ios - CoreLocation 在一定时间后停止在后台工作

我正在开发一个用于健身(跑步)的 iOS(7.0+)应用程序,它使用用户的 GPS 位置,进行小计算并将数据传输到蓝牙低功耗(4.0)手表。这个过程需要在后台进行,即使用户锁定了他们的 iOS 设备。

我还实现了以下后台模式:

我已经成功地让一切正常工作,除了在设备锁定一段时间后(例如 2 小时),iOS 设备停止更新位置,因为我可以看到它不再发送更新蓝牙手表的 GPS 值。然后我必须解锁设备,重新打开应用程序,定位服务再次正常工作。

有谁知道如何让定位服务在后台一直运行(设备锁定),而不会在一段时间后突然停止位置更新?如果可能的话,一个有效的解决方案将是首选,它不会比使用 GPS 的正常情况消耗更多的电池电量。

0 投票
1 回答
353 浏览

ios - 应用程序未运行时的iOS后台模式?

应用关闭时接收位置更新的后台模式是否可用?有什么方法可以收集和共享位置数据Friends app吗?它始终共享位置,即使在不运行时也是如此。

0 投票
0 回答
359 浏览

ios - 应用程序处于挂起状态时未调用 didUpdateValueForCharacteristic

我正在开发一个需要在某些情况下无限期连接到蓝牙外围设备的应用程序。

在继续我的问题之前,我想确认一下:

  • 我正在初始化我CBCoreBluetoothManager的 in didFinishLaunchingWithOptions:
  • 我启用了bluetooth-central后台功能。
  • 我通过使用密钥初始化 Manager 来使用状态保存和恢复,并实现willRestoreState
  • 在我的问题发生之前,我与我的外围设备建立了成功的连接,我得到了它的服务(我只是在寻找一个)和它的特性(我只是在寻找一个),我确实设置setNotifyValue:YES. 此外,无论是在前台还是后台,didUpdateValueForCharacteristic:每次特征值更新时我都会收到回调。
  • 我正在模拟“暂停状态” kill(getpid(), SIGKILL)(我还通过将应用程序放在后台进行了测试,并让它静置 1 小时以上)
  • 当我说暂停时,我指的是实际Suspended状态。我相信每个应用程序最终都会在后台运行一段时间后到达那里。

我遇到的问题是didUpdateValueForCharacteristic:在应用程序暂停时获得回调。如果应用程序在后台,我会再次收到回调,但在暂停时不会。这意味着,应用程序不会被特征的值更新唤醒。

有趣的是,当我的应用程序处于暂停模式时,我走出外围设备范围以断开连接,然后回到范围内重新连接,应用程序将被唤醒,因为它会尝试恢复(它调用 willRestoreState:) 并在短时间内监听任何特征值更新。

总而言之,当我的应用程序处于挂起状态并且在外围设备范围内时,didUpdateValueForCharacteristic 不会被调用,这意味着应用程序不会被唤醒,我 100% 确定是特征值更新。但是,如果我走出外围设备的范围并重新进入,它会唤醒应用程序,因为我支持状态保护和恢复。

来自 Apple 的文档:

The system wakes up your app when any of the CBCentralManagerDelegate or CBPeripheralDelegate delegate methods are invoked, allowing your app to handle important central role events, such as when a connection is established or torn down, when a peripheral sends updated characteristic values, and when a central manager’s state changes.

看来我应该得到这些更新,有人遇到过这样的问题吗?

任何帮助表示赞赏!

提前致谢

0 投票
0 回答
545 浏览

ios - 如何在 xcode 中禁用后台模式,以便您可以构建到设备?

我启用了后台模式来试用它,现在它阻止我的应用程序构建到设备上。我正在尝试禁用后台模式,因为坦率地说,它会弄乱我的构建并阻止我运行应用程序。我尝试在模拟器和真实设备上构建,但都没有工作。我已经删除了后台功能,还从我的 info.plist 中删除了密钥。有谁知道如何摆脱屏幕截图中显示的错误,以便我可以再次运行我的应用程序?

见截图 1

在此处输入图像描述

见截图 2

在此处输入图像描述

0 投票
0 回答
252 浏览

ios - 当应用程序移动到后台状态时,如何在 iOS 中停止/处理 UI 操作?

我的应用程序可以通过UIApplicationLaunchOptionsLocalNotificationKey在后台启动。在这种情况下,通常的设置流程initail view controller和应用程序的登录页面/应用程序首页上的一些动画就会发生。

我的问题是,这是一个好习惯吗?如果即使我的应用程序在后台通过操作系统启动,我也会像这样离开这些动画?我关心的三件事:

  1. 一些动画是连续的,比如circular-dot(UIImage)扩展和收缩,使用 CAAnimation。

  2. keyWindow根据用户位置,某些视图作为子视图添加和删除。

  3. 当用户点击主页按钮时,我是否还需要停止动画和子视图添加?

使动画停止和恢复applicationDidEnterBackground似乎applicationWillEnterForeground很乏味。

0 投票
1 回答
2213 浏览

ios - 为什么我的 iOS 应用程序在返回前台模式后会从第一个屏幕重新启动?

当在详细屏幕中的我的 iOS 应用程序中时,我按下主页按钮,这将导致它进入后台模式。在 7 分钟左右不活动后,我重新启动它,但它并没有从我离开它的地方开始。它从第一个屏幕开始。

我上网,开始了解国家保护和恢复。我在一个屏幕上实现了,但它似乎不起作用。这就是我在 appDelegate.m 中所做的

以下代码在 appDelegate.m 中的 willFinishLaunchingWithOptions 方法中。我没有使用故事板,因为这个应用程序很旧。它有XIB。所以这个应用程序总是需要进入登录屏幕,检查是否存储了 accessToken,它将从登录屏幕进入主屏幕。如果未存储,它将保留在登录屏幕中。所以这是强制执行的。因此,只有一种方法可以像下面这样编码。

我已经在 viewDidLoad() 中为所有视图控制器提供了 restoreId,如下所示。例如,这就是我在 PetDetailViewController.m 中所做的

现在,当我进入 PetDetail 屏幕并按下主页按钮时,将调用 encodeRestorableStateWithCoder()。从 xcode 停止应用程序,重新启动它会停留在同一屏幕上,但会立即进入登录屏幕并转移到主屏幕(willFinishLaunchingWithOptions 中的代码可能正在执行)

我做错什么了吗?除非用户手动杀死它,否则如何防止应用程序从第一个屏幕重新启动?