25

我正在构建一个家庭自动化系统,我选择 iPad 作为主要集线器/桥接设备来控制许多蓝牙设备(一些使用 RFDuino 定制)。

iPad(iOS 8.4.1)安装在墙上,一直插在充电器上。

我需要选择正确的方法让应用程序始终运行以控制设备并接收更新、触发事件等。

问题是:有没有办法在视觉上禁用屏幕?将其调暗是不够的;最好关闭屏幕,例如在锁定设备状态下。

简单来说,我可以使用黑屏保护程序吗?

如果上面的答案是否定的:有没有办法强制应用程序永远在后台运行?

这里要强调一件事。此应用程序不会进入 Apple Store,因此该解决方案可能是一个肮脏的解决方法

提前致谢

到目前为止测试过:

let backgroundQueue = dispatch_get_global_queue(QOS_CLASS_BACKGROUND,0)

func applicationDidEnterBackground(application: UIApplication) {

    application.beginBackgroundTaskWithName("myBgTask", expirationHandler: nil)
    dispatch_async(self.backgroundQueue, myBackgroundTask)
}

func myBackgroundTask() {
    NSThread.sleepForTimeInterval(1)
    dispatch_async(self.backgroundQueue, myBackgroundTask)
}

这种方法仅使应用程序在后台运行 3 分钟。

不停寻找...

4

3 回答 3

9

尝试UIApplicationExitsOnSuspend解决方案:

因为当您点击主页按钮时,iOS 4 应用程序会暂停。在此之前(iOS 3),每次您打开应用程序时它们都会退出并重新启动 - 但是,如果您没有使用主页按钮关闭应用程序,而是在打开 iOS 3 应用程序的情况下锁定设备,它将永远在后台运行. UIApplicationExitsOnSuspend您可以通过将密钥添加到 info plist来让您的应用程序像这样工作,将值设置为YES.

您将无法快速关闭和重新打开应用程序(每次使用主页按钮时都会重新启动),但如果您不经常与 iPad 交互,那么您可以在应用程序打开时锁定设备它将继续运行,直到 iPad 解锁或您打开另一个应用程序。

请注意,此解决方案对 App Store 有效,因为它使用官方 Apple API。

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

于 2015-09-15T01:47:28.750 回答
4

在应用真正暂停之前,所有应用最多有 10 分钟的时间来完成它们正在执行的操作。但在某些情况下,它们可能需要运行更长时间,例如播放音乐或计算步数。可以使用必需的后台模式来完成,这些模式可以让您的应用程序在后台永久运行。

请看下面的图片:

在此处输入图像描述 在此处输入图像描述

访问后台执行:Apple

访问下面的 URL 可能会有所帮助。

https://stackoverflow.com/a/29168981/4101371

http://www.raywenderlich.com/29948/backgrounding-for-ios(用于示例代码的解释。)

希望它有助于解决您的问题。

于 2015-09-09T12:53:10.400 回答
-3

您能否通过在后台运行静音来绕过/破解。我无法想象这是有效的或最好的解决方案,但它可能是一种解决方法。我知道 Workflow 的创建者也试图绕过这一点,并且也达到了 10 分钟的限制。解决方法是在 9 分钟标记处简单地发送本地通知,并告诉用户再次打开应用程序,以便它可以继续运行。

于 2015-09-13T22:06:26.783 回答