【问题标题】:alarm clock like sleep cycle ios swift像睡眠周期一样的闹钟 ios swift
【发布时间】:2016-01-24 16:43:41
【问题描述】:

我一直在寻找答案很长时间,但我没有找到它。我想创建一些类似于闹钟的应用程序。

其中一个功能将在用户指定的时间唤醒(不足为奇)。如果您查看睡眠周期应用程序,您会注意到它会唤醒您,但它也会跟踪您的睡眠,因此它必须在后台运行。此外,它还可以播放将您唤醒的歌曲,直到您将其关闭(不仅是 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
    播放一些声音。 所以第一个问题是:如何像睡眠周期应用程序那样从背景播放声音?而且我确信睡眠周期不会使用通知声音。

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

请帮忙:)

【问题讨论】:

  • 见下方评论; Apple 确实明确表示您不能播放“静音”音轨:在后台播放音频内容的应用必须播放有声内容,而不是静音。

标签: ios iphone swift audio alarm


【解决方案1】:

好的,所以我设法使用了一些技巧:

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

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 mode 部分启用音频支持。 (您还可以通过在应用的 Info.plist 文件中包含带有音频值的 UIBackgroundModes 键来启用此支持。)

我也必须这样做:

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

而且改变设备的体积非常简单:

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

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

希望它会有所帮助:)

【讨论】:

  • 这对我将来了解各种应用程序非常有用。你愿意在这里放高级子弹吗?作为这样做的预先动机,我对你的答案投了赞成票:)
  • 不幸的是,不可能有一个循环的“静音”音轨,如您引用的同一文档部分中所列:在后台播放音频内容的应用程序必须播放有声内容,而不是沉默。 "developer.apple.com/library/ios/documentation/iPhone/Conceptual/…"
  • 我现在播放的不是音量为 0 的歌曲
  • 这个提交到商店了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多