闹钟像睡眠周期ios swift

时间:2016-01-24 16:43:41

标签: ios iphone swift audio alarm

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

它的一个功能将在用户指定的时间唤醒(没什么好奇怪的)。如果你看看睡眠周期应用程序,你会注意到它会唤醒你,但它也会跟踪你的睡眠,所以它必须在后台运行。此外,它还可以播放唤醒你的歌曲,直到你将其关闭(不仅仅是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)
        }

    然后我用

    AVAudioPlayer
    播放一些声音。 所以第一个问题是:如何从睡眠周期应用程序的背景播放声音呢?而且我确定睡眠周期不会使用通知声音。

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

    请帮助:)

1 个答案:

答案 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键来启用此支持。)

而且我必须这样做: enter image description here

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

设备的changig体积非常简单:

    let volumeView = MPVolumeView()
    if let view = volumeView.subviews.first as? UISlider{
        view.value = 0.3
    }

并设置view.value表单0 - 1。

希望它会有所帮助:)