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