如何从后台检测 iOS 设备方向?

How to detect iOS device orientation from background?

我正在为 运行 在后台运行的客户开发应用程序。

它不是应用商店应用,因此它没有与通常适用于应用商店应用的规则完全相同。即使私有 API 也是此应用程序的一个选项,但它必须 运行 在非越狱设备上。 (该应用将成为企业应用。)

应用需要知道当前的设备方向。看似简单,其实不然。我使用的是您期望的普通代码:

UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
BOOL inLandscape = UIDeviceOrientationIsLandscape(deviceOrientation);

但是,这 returns 似乎是应用从前台移动到后台时生效的方向。

我需要方向来跟踪实际的设备方向。实际上,我真正想要的是当前前台应用程序的用户界面方向,但 Apple 很难推断出这一点。如果必须的话,我会满足于设备方向。

此应用程序是用 Objective-C 编写的,但我也是 "speak Swift",所以用任何一种语言表达的答案都可以。

有一个名为 -[UIApplication _getSpringBoardOrientation] 的私有方法,它只是调用另一个私有方法 -[UIApplication activeInterfaceOrientation],它似乎为您提供了当前前台应用程序的方向。

我问过Apple这个问题,他回答说要用Core Motion