[英]alarm clock like sleep cycle ios swift
我一直在寻找答案,但没有找到。 我想创建一些类似于闹钟的应用程序。
它的功能之一将在用户指定的时间醒来(不足为奇)。 如果您查看睡眠周期应用程序,您会注意到它可以唤醒您,但它也可以跟踪您的睡眠,因此它必须在后台运行。 此外,它还可以播放唤醒您的歌曲,直到您将其关闭为止(不仅限于30秒钟,这是通知声音长度的限制)。 它还可以调高设备的音量。
如果我还没有真正看到这个应用程序,那么我就不会相信开发人员可以在iPhone上实现这种功能。
我目前的进度:
我可以在用户指定的时间播放声音,但前提是应用程序处于前台。 如果播放了声音,然后用户单击“主页”按钮,声音仍然会播放(很酷),但是如果应用程序处于后台,则音乐无法开始播放。 这是一些代码:
do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: AVAudioSessionCategoryOptions.MixWithOthers) print("AVAudioSession Category Playback OK") do { try AVAudioSession.sharedInstance().setActive(true) print("AVAudioSession is Active") } catch let error as NSError { print(error.localizedDescription) } } catch let error as NSError { print(error.localizedDescription) }
然后我用
AVAudioPlayer
播放一些声音。 因此,第一个问题是:如何像睡眠周期应用程序一样播放背景声音? 而且我确定睡眠周期不会使用通知声音。 我的第二个问题是如何更改设备的音量(睡眠周期也可以做到这一点,但是在堆栈溢出的情况下,很多人说这是不可能的)。
请帮忙 :)
好的,所以我设法使用一些技巧:
首先,这是可以帮助我设置音频播放器的功能:
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer? {
//1
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
let url = NSURL.fileURLWithPath(path!)
//2
var audioPlayer:AVAudioPlayer?
// 3
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
} catch {
NSLog("Player not available")
}
return audioPlayer
}
然后,当用户按下按钮“启动警报”时,我这样做:
silence_audio = setupAudioPlayerWithFile("silence", type:"wav");
silence_audio?.numberOfLoops = -1;
silence_audio?.volume = 1;
silence_audio?.play();
您可以猜到它什么都没发出来-空着的声音。 苹果说:
对于需要更多执行时间才能实现的任务,您必须请求特定的权限才能在后台运行它们而不暂停它们。 在iOS中,只允许特定的应用类型在后台运行:
-在后台播放可听内容的应用程序,例如音乐播放器应用程序
连续播放或录制音频的应用程序(即使该应用程序在后台运行)也可以注册以在后台执行这些任务。 您可以从Xcode项目中“功能”选项卡的“背景模式”部分启用音频支持。 (您还可以通过在应用程序的Info.plist文件中包含音频值和UIBackgroundModes键来启用此支持。)
之后,我的应用程序便可以不受限制地在后台运行。 如果Apple不允许我发布它,我将开始使用麦克风或类似的东西。 没有该功能,将无法执行闹钟应用程序。
而且设备的更改量非常简单:
let volumeView = MPVolumeView()
if let view = volumeView.subviews.first as? UISlider{
view.value = 0.3
}
然后将view.value设置为0-1。
希望它会有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.