闹钟像睡眠周期ios swift

Kas*_*per 6 iphone audio alarm ios swift

我一直在寻找答案,我还没有找到答案.我想创建一些类似于闹钟的应用程序.

其中一个功能将在用户指定的时间唤醒(没什么好奇怪的).如果你看看睡眠周期应用程序,你会注意到它会唤醒你,但它也会跟踪你的睡眠,所以它必须在后台运行.此外,它还可以播放唤醒你的歌曲,直到你将其关闭(不仅仅是30秒,作为通知声音的长度限制).它也可以调高设备的音量.

如果我没有看到这个应用程序在行动,我不相信开发人员可以在iPhone上做这样的功能.

我目前的进展:

  1. 我可以在用户指定的时间播放声音,但前提是应用程序位于前台.如果播放声音,然后用户单击主页按钮仍然播放声音(这很酷)但如果应用程序处于后台,则音乐无法启动.这是一些代码:

    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)
        }
    Run Code Online (Sandbox Code Playgroud)

    然后我用

    AVAudioPlayer
    Run Code Online (Sandbox Code Playgroud)发挥一些声音.所以第一个问题是:如何从睡眠周期应用程序的背景播放声音呢?而且我确定睡眠周期不会使用通知声音.

我的第二个问题是如何改变设备音量(睡眠周期也可以做到但是在堆栈溢出时有很多人说这是不可能的).

请帮忙 :)

Kas*_*per 2

好的,所以我设法使用一些技巧来做到这一点:

\n\n

首先,这是帮助我设置音频播放器的函数:

\n\n
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {\n    //1\n    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)\n    let url = NSURL.fileURLWithPath(path!)\n\n    //2\n    var audioPlayer:AVAudioPlayer?\n\n    // 3\n    do {\n        try audioPlayer = AVAudioPlayer(contentsOfURL: url)\n    } catch {\n        NSLog("Player not available")\n    }\n\n    return audioPlayer\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,当用户按下“启动警报”按钮时,我会这样做:

\n\n
silence_audio = setupAudioPlayerWithFile("silence", type:"wav");\nsilence_audio?.numberOfLoops = -1;\nsilence_audio?.volume = 1;\nsilence_audio?.play();\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如你可以猜到的那样,这是空无一物的声音——空洞的声音。苹果说:

\n\n
\n

对于需要更多执行时间来实现的任务,您必须请求特定权限才能在后台运行它们而不被挂起。在 iOS 中,只允许特定的应用程序类型在后台运行:

\n\n

- 在后台向用户播放音频内容的应用,例如音乐播放器应用

\n\n

连续播放或录制音频的应用程序(即使应用程序在后台运行时)可以注册以在后台执行这些任务。您可以从 Xcode 项目中“功能”选项卡的“后台模式”部分启用音频支持。(您还可以通过在 app\xe2\x80\x99s Info.plist 文件中包含 UIBackgroundModes 键和音频值来启用此支持。)

\n
\n\n

我也必须这样做:\n在此输入图像描述

\n\n

之后我的应用程序就可以不受限制地在后台运行。如果苹果不允许我发布它,我将开始使用麦克风或类似的东西。如果没有该功能,就不可能制作闹钟应用程序。

\n\n

并且改变设备的音量非常简单:

\n\n
    let volumeView = MPVolumeView()\n    if let view = volumeView.subviews.first as? UISlider{\n        view.value = 0.3\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后将 view.value 设置为 0 - 1。

\n\n

希望它会有所帮助:)

\n