如何在iOS中播放背景音频文件

时间:2016-03-10 09:42:15

标签: ios swift avaudioplayer

我正在尝试构建 闹钟应用 ,因此需要 根据时间播放声音 在DatePicker(NSDate)W中输入的内容。我通过实现正在执行播放音频功能的NSTimer来做到这一点。我还提供了在info.plist中设置 AVAudioSessionCategoryPlayback 背景模式以允许播放声音,即使用户将应用程序带到后台也是如此。它的工作原理很完美,但前提是应用程序位于前台(计时器无法从后台执行代码)。制作它的方法是什么? 附:一个人告诉我,他之前通过播放“无声的声音”来做到这一点。保持应用程序处于执行状态。希望能有更好的解决方案=)

import UIKit
import AVFoundation
import MediaPlayer

class AlarmViewController: UIViewController {

var date = NSDate()
var ding = AVAudioPlayer()

override func viewDidLoad() {
    super.viewDidLoad()

    // Setting AVAudioSession to enable playing music in silent mode
        do {
            _ = try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            _ = try AVAudioSession.sharedInstance().setActive(true)
        } catch {
            print("Something wrong in declaring session")
        }

    let timer = NSTimer(fireDate: NSDate(timeIntervalSinceNow: 5), interval: 0, target: self, selector: "prepareAudios", userInfo: nil, repeats: false)
    NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
}

func prepareAudios() {

    let path = NSBundle.mainBundle().pathForResource("Hills", ofType: "m4r")

    do {
        ding = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!))
    } catch {
        print("Something wrong in prepareAudios() func")
    }

    // This code sets max volume on device
        let masterVolumeSlider = MPVolumeView()

        if let view = masterVolumeSlider.subviews.first as? UISlider{

            view.value = 1.0

        }

    ding.volume = 1.0

    ding.prepareToPlay()

    ding.play()
}

0 个答案:

没有答案