设备处于静音模式时播放音频 - ios swift

Ams*_*eer 28 audio ios swift

我正在使用xcode 7.1,swift创建一个应用程序.我想播放音频.一切都好.现在我的问题我想听到设备处于静音模式或静音时的声音.我该怎么做?

我使用以下代码播放音频

currentAudio!.stop()
            currentAudio = try? AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sample_audio", ofType: "mp3")!));

            currentAudio!.currentTime = 0

            currentAudio!.play();
Run Code Online (Sandbox Code Playgroud)

rus*_*ani 71

在调用AVPlayer的play()方法之前放这一行.

在目标C中

[[AVAudioSession sharedInstance]
            setCategory: AVAudioSessionCategoryPlayback
                  error: nil];
Run Code Online (Sandbox Code Playgroud)

在斯威夫特

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
 }
 catch {
    // report for an error
 }
Run Code Online (Sandbox Code Playgroud)

  • 导入是:`#import <AVFoundation/AVFoundation.h>` (2认同)
  • 小挑剔:对于“catch”,你不需要指定(let error),因为 swift 会为你做这件事。 (2认同)

max*_*ell 15

你可以使用AppDelegate类。

要在设备处于静音模式时启用声音(用于音频或视频),请使用AVAudioSessionCategoryPlayback

func applicationDidBecomeActive(_ application: UIApplication) {

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    } catch {
        print("AVAudioSessionCategoryPlayback not work")
    }
}
Run Code Online (Sandbox Code Playgroud)

要在设备处于静音模式时禁用声音(例如当我们接听电话时),请使用AVAudioSessionCategorySoloAmbient

func applicationWillResignActive(_ application: UIApplication) {

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
    } catch {
        print("AVAudioSessionCategorySoloAmbient not work")
    }
}
Run Code Online (Sandbox Code Playgroud)


Sau*_*hah 6

Swift 3.0和Xcode> 8

当设备处于RINGER模式和SLIENT模式时,在视频中播放声音

 do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        //print("AVAudioSession Category Playback OK")
        do {
            try AVAudioSession.sharedInstance().setActive(true)
            //print("AVAudioSession is Active")
        } catch _ as NSError {
            //print(error.localizedDescription)
        }
    } catch _ as NSError {
        //print(error.localizedDescription)
    }
Run Code Online (Sandbox Code Playgroud)

  • 你好。这是错误的:`catch _ as NSError`。在这种情况下只需使用 `catch`。不要向下转换为丢弃的值,这是没有意义的。 (2认同)

Yog*_*ngh 6

斯威夫特 4.2

   do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
    } catch let error {
        print("Error in AVAudio Session\(error.localizedDescription)")
    }
Run Code Online (Sandbox Code Playgroud)


far*_*ari 5

斯威夫特 4

在播放视频之前使用此行

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
Run Code Online (Sandbox Code Playgroud)