Var*_*pta 14 iphone ios uilocalnotification
我正在研究可以提醒用户注意某些重要事情的应用程序.我使用本地通知来提醒用户.在iOS上,我发现如果手机处于振动状态,通知将不会响铃.对于应用程序的许多用户来说,这是一个交易破坏者,但我一直把这个问题放到现在,因为我认为如果应用程序在后台,iOS不允许应用播放声音.
即使手机处于振动状态,音乐应用也可以通过启用音频背景模式播放歌曲,但不允许您安排在特定时间播放歌曲.
最近我看到一些应用程序能够在特定时间播放声音,即使该应用程序在后台.一个这样的应用程序是Alarmy警报应用程序.当警报到期时,我不认为他们正在通过本地通知播放音乐,因为即使在我清除通知后音乐仍继续播放.从本地通知文档中,我了解到在本地通知触发之前我无法运行任何代码,直到用户点击通知为止.所以,我无法启动一个可以在振动中播放声音的音频播放器.
即使手机处于振动状态并且应用程序在iOS中处于后台,这些应用程序如何才能播放声音?
实现这种功能的方法很少.作为参考,我推荐这个链接.
用于在设备的振铃开关设置为振动时实际播放声音
首先,请确保在功能中包含音频背景模式,以便在后台播放音频.
然后,
斯威夫特4
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.duckOthers, .defaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true)
UIApplication.shared.beginReceivingRemoteControlEvents()
} catch {
NSLog("Audio Session error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们将共享音频会话的类别设置为AVAudioSessionCategoryPlayAndRecord,以便我们可以播放声音,同时设备的振铃开关设置为振动.
该.duckOthers指定让其他音频安静,如果有任何混合的音频播放,使我们的警报可以听到.如果您喜欢不同的行为,可以将其保留或使用其他选项.
该.defaultToSpeaker指定,使体积会去说话,它会更响亮,应该唤醒我们轻松的用户.
beginReceivingRemoteControlEvents使得应用程序可以处理远程控制选项,例如锁定屏幕上的播放/暂停按钮,以便我们的用户在唤醒后更轻松地将其警报静音.
可以做到这一点的方法(我已经在我的应用程序中实现了这一点)是通过启动一个 AVAudioPlayer 并指定一个特定的播放时间。所以:
在应用程序功能中启用背景音频。
使用 .playback 模式开始和音频会话,并在您喜欢播放时启动播放器:
do {
//set up audio session
try AVAudioSession.sharedInstance().setCategory(.playback, options: [.defaultToSpeaker, .duckOthers])
try AVAudioSession.sharedInstance().setActive(true)
//Start AVAudioPlayer
player.play(at: time) //time is a TimeInterval after which the audio will start
}
catch {
...
}
Run Code Online (Sandbox Code Playgroud)这不会在后台播放静音,这违反了Apple的规则。它实际上启动了播放器,但音频只会在正确的时间启动。我认为这可能是 Alarmy 实现他们警报的方式,因为它不是触发音频的远程通知,也不是本地通知播放的音频(因为它不限于 30 秒或被振铃开关静音)。
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |