最终用户流程
- Open app
- 打开“静音模式”。
- 按“锁定按钮”
- 应用程序仍然可以在几小时后开始播放声音,而不是在此期间播放任何音频。
执行此操作的应用程序
许多警报应用程序都设法做到这一点,我认为他们没有使用静音音频来保持应用程序运行,因为如果您实际上通过主页退出应用程序,它们不会发出声音。
- 闹钟专业版
- My Clock
- 波浪报警
- Alarmed
- iHome
- ...
...他们是否在被锁定后保持循环运行,或者是通知(无法静音播放声音)启动应用程序备份以播放音频,或者其他方法?
当前实施的方法
AVAudioPlayer 使用:
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
并将 Info.plist 设置为:
所需的背景模式(UIBackGroundModes) - 应用程序播放音频(音频)
现在
当应用程序运行并在屏幕上时,即使在静音状态下,我也可以播放音频。如果音频已经在运行,则可以使用主页按钮关闭应用程序,然后音频将运行。但是,如果应用程序不播放音频,并且屏幕被锁定,则所有线程都会被终止,并且永远不会播放音频。这些应用程序如何设法解决这个问题?
迄今为止发现的可能方法
A. 使用“beginBackgroundTaskWithExpirationHandler:”和无限循环来保持应用程序无限期运行。
Pros:
- 看起来您可以在很多情况下实现此功能,即使用户按下 Home 键也是如此。
Cons:
评论:
我几乎已经让它工作了,可能需要一些调整。这似乎并不是所有其他警报所做的事情,因为如果您按 home BTN,它们就不会继续运行。这表明他们使用了某种方法,允许他们在锁定时运行,但不能在 BG 中运行。 (这就是我需要的)
另外,当你问你还剩多少时间跑步时,你会得到大约 10 分钟。通过在其中放置一个无限循环,数字实际上会下降到 0,然后连续几个小时进入负值。(经过测试)我不确定这在现实世界中或在应用程序接受度方面会如何表现。
B. 使用静音音频循环充当连续音频播放的媒体中心
Pros:
Cons:
- 如果被另一个媒体中心或其他一些情况中断,可能会失败。
- 也可能违反苹果政策。
评论:
这可以在很多情况下工作,但到目前为止并不理想。正如我再次所说,必须有另一种未记录的方法。
迄今为止的结论
对列出的应用程序进行测试表明它们没有使用我刚才描述的两种方法中的任何一种。方法“A”似乎更接近,但如果实施,其行为将不会像这些应用程序的行为那样。
我使用苹果开发者票证来获取更多信息,我也会通过这些方式发布任何新发现。
谢谢
感谢您的任何见解以及迄今为止您的参与。