我一直在寻找答案,但我还没有找到答案。我想创建一些与闹钟类似的应用程序。
它的一个功能将在用户指定的时间唤醒(没什么好奇怪的)。如果你看看睡眠周期应用程序,你会注意到它会唤醒你,但它也会跟踪你的睡眠,所以它必须在后台运行。此外,它还可以播放唤醒你的歌曲,直到你将其关闭(不仅仅是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
播放一些声音。
所以第一个问题是:如何从睡眠周期应用程序的背景播放声音呢?而且我确定睡眠周期不会使用通知声音。
我的第二个问题是如何改变设备音量(睡眠周期也可以做到但是在堆栈溢出时有很多人说它是不可能的)。
请帮助:)
答案 0 :(得分:2)
好的,所以我设法使用一些技巧:
首先,这是帮助我设置音频播放器的功能:
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项目的Capabilities选项卡的Background modes部分启用音频支持。 (您也可以通过在应用程序的Info.plist文件中包含带有音频值的UIBackgroundModes键来启用此支持。)
之后,我的应用程序可以在后台运行,没有任何限制。如果Apple不允许我发布它,我将开始使用麦克风或类似的东西。如果没有该功能,则无法使用闹钟应用程序。
设备的changig体积非常简单:
let volumeView = MPVolumeView()
if let view = volumeView.subviews.first as? UISlider{
view.value = 0.3
}
并设置view.value表单0 - 1。
希望它会有所帮助:)