如果应用程序在后台,UILocalNotification 如何调用某些方法

Posted

技术标签:

【中文标题】如果应用程序在后台,UILocalNotification 如何调用某些方法【英文标题】:UILocalNotification how to call certain method if application is in background 【发布时间】:2012-02-04 13:03:31 【问题描述】:

我正在创建播放器应用程序,它通过互联网播放音频流。我想在我的应用程序中添加警报功能 - 特别是当我的播放器开始播放音频流时,我正在尝试使用 UILocalNotification 机制。但是当我的应用程序处于后台模式时,我遇到了困难,当收到通知时(不能没有用户交互),我无法调用“播放”方法。有没有可能?

但我买了这个应用程序: http://itunes.apple.com/us/app/radio-alarm-clock-mp3-radio/id380271167?mt=8 当收到本地通知时,似乎收音机可以开始播放。当我的应用程序处于后台模式时,闹钟可以开始播放收音机。 早些时候我试图为此使用 NSTimer,但是当我的应用程序进入后台时,计时器停止。如果我使用 beginBackgroundTaskWithExpirationHandler: 它只工作 10 分钟。我的应用程序在 plist 中有特殊标志,什么是音频应用程序,并且可以在后台播放音乐。在这种情况下,计时器正在工作。但是,如果我停止播放并转到后台,则计时器不起作用。 当我使用 \Radio Alarm Clock' 应用程序时,当音乐未播放时,我会听到动态的“白噪声”。可能是这个应用程序的秘密? 你能帮我解决我的问题吗?谢谢。

【问题讨论】:

嗨,我在同一个应用程序中遇到同样的问题你知道吗?请告诉我...! 【参考方案1】:

也许为时已晚。 我查看了您在http://itunes.apple.com/us/app/radio-alarm-clock-mp3-radio/id380271167?mt=8 中提到的应用程序,是的,我认为您绝对正确,实现应用程序在后台保持活动状态的唯一方法是在后台播放假声音, 这应该被 Apple 禁止。

我还看到他们不使用远程 iPod 控制,这乍一看很奇怪。 最后,我认为他们做了以下事情:

避免调用 beginReceivingRemoteControlEvents,它允许在后台激活 iPod 控件(实际上他们没有) 这样,状态栏不显示播放图标,而 应用播放音频 当应用程序进入后台时,它可能会定期播放无声音(例如每 10 秒一次),这样应用程序就会保持活动状态 我看到他们也避免管理中断,例如以防另一个应用程序在前台播放音乐。同样,Apple 应该出于这个原因拒绝该应用程序,因为它违反了在后台时遵循的规则,但也许他们在验收测试期间没有看到它。

所以我的解释是他们故意错过了激活 iPod 控件,只是为了避免在后台显示状态栏中的播放图标。这样一来,用户就不会意识到应用程序处于活动状态,并且在关闭应用程序后正在做一些奇怪的事情。 此外,您可以看到,当另一个应用程序在前台播放声音或音频时,该应用程序不会中断,因为否则它们会冒着应用程序在警报应该触发时无法按时重新启动的风险。 这只是我对他们如何做到这一点的想法,我认为这是 ios 上的音频应用程序在后台保持活动状态并且应该停止的唯一方法(好吧,以防 Apple 没有看到这个技巧)。

【讨论】:

【参考方案2】:

您是否尝试将其添加到 appdelegate.m

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
    // Call your method in here.

如果你有,你可以添加代码让我们看看你在做什么。

【讨论】:

是的,我愿意。但是当我的应用程序处于后台模式时,不会触发此方法。 useyourloaf.com/blog/2010/7/31/… 当我想在我的应用程序上获得本地通知时,这可能会对我有所帮助。

以上是关于如果应用程序在后台,UILocalNotification 如何调用某些方法的主要内容,如果未能解决你的问题,请参考以下文章

如果用户关闭已经在后台的应用程序会发生啥?

如果应用程序正在启动,如何停止后台任务?

如果前台应用程序终止,如何通知后台任务?

iOS:如果应用程序在后台并到达本地通知;哪个方法会自动调用?

如果应用程序在后台运行,如何获取当前位置的纬度和经度?

如果应用程序在后台,iOS Swift Timer 不会触发