iOS 8如何让应用程序一直运行或禁用屏幕?

25

我正在建造一个家庭自动化系统,选择iPad作为控制许多蓝牙设备的主要枢纽/桥接设备(一些是使用RFDuino自定义制作的)。

iPad(iOS 8.4.1)被安装在墙上,并始终插入充电器。

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

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

简单来说,我能否使用黑色屏幕保护程序?

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

这里需要强调一点。此应用程序不会进入苹果商店,因此解决方案可能是一种“肮脏的”解决方法。

提前致谢

到目前为止测试过:

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分钟。

继续搜索...


5
我家不考虑安卓系统。无论如何,问题是关于iOS的。 - Greg Lukosek
2
你可以使用手机代替iPad吗?如果你将UIApplication的proximityMonitoringEnabled属性设置为YES,并覆盖靠近耳机扬声器旁边的接近传感器(不是相机的那个点),它应该会自动关闭屏幕,而不会将你的应用程序发送到后台。 - Noah Witherspoon
你应该能够在Info.plist中使用UIBackgroundMode: bluetooth-central,对吗? - Siguza
根据苹果文档,它只提供大约10秒的处理时间,然后将关闭应用程序。这可能是简单系统的解决方案,但需要始终运行逻辑。 - Greg Lukosek
这将使屏幕保持黑色,同时背光保持开启。真的不想看到黑盒子在客厅的主墙上发光。 - Greg Lukosek
显示剩余5条评论
3个回答

9
尝试使用UIApplicationExitsOnSuspend解决方案:
自iOS 4以来,当您按下主屏幕按钮时,应用程序将被挂起。在此之前(iOS 3),每次打开应用程序时都会退出并重新启动 - 但是,如果您没有使用主屏幕按钮关闭应用程序,而是锁定设备并保持您的iOS 3应用程序处于打开状态,它将永久在后台运行。您可以通过将UIApplicationExitsOnSuspend键添加到信息属性列表中,并将值设置为YES,使您的应用程序像这样工作。
您将无法快速关闭和重新打开应用程序(每次使用主屏幕按钮都会重新启动),但是如果您很少与iPad交互,则可以在打开应用程序时锁定设备,直到iPad解锁或打开另一个应用程序为止。
请注意,此解决方案适用于App Store,因为它使用官方的Apple API。
参考链接:https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

跑夜间测试,看起来很有前途。祈求好运。 - Greg Lukosek
看起来我们有一个赢家!应用刚刚通过了10分钟的阈值,并且在屏幕关闭的情况下完美运行。谢谢您,先生!感谢@Damo提供的奖励。 - Greg Lukosek

4
所有应用程序都有10分钟的时间来完成它们正在进行的操作,然后应用程序才会真正被挂起。但在某些情况下,它们可能需要运行更长时间,例如播放音乐或计算步数。可以使用必需的后台模式来实现。这些模式可以使您的应用程序永久在后台运行。
请查看下面的图像:

enter image description here enter image description here

访问后台执行的苹果

下面的URL可能会有帮助。

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

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

希望它能帮助您解决问题。


仍在学习Ray Wenderlich的内容。测试所有方法。目前只能在后台运行不超过3分钟。iOS 8.4.1中有一些更改,以防止人为延长应用程序的生命周期。 - Greg Lukosek
1
@CaptJak - 你应该先阅读苹果提供的文档。如果后台应用程序没有进行任何处理,它将被终止。 - Dhaivat Vyas
2
@GregLukosek 如果你的应用程序播放一些音频,那么它可以永远在后台运行。例如 Spotify 或播客应用程序能够无限期地在后台运行。你所播放的声音不必实际通过扬声器听到(只需重复播放一段静音音轨即可)。这样做会导致你的应用被禁止在应用商店上架,但对于公司内部使用的应用程序来说,这是完全可行的。 - Abhi Beckert

-3

你能否通过在后台运行静默来绕过/黑客攻击。我无法想象这是高效或最佳解决方案,但它可能是一个变通方法。我知道Workflow的创建者也尝试绕过此限制,并且也遇到了10分钟的限制。他们的解决方法是在第9分钟发送本地通知并告诉用户再次打开应用程序,以便它可以继续运行。


那意味着我每10分钟就必须重新激活应用程序,这根本不是解决方案。 - Greg Lukosek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接