【问题标题】:Play sound when silent静音时播放声音
【发布时间】:2016-01-29 16:17:47
【问题描述】:

我有一个项目需要在手机处于静音模式时播放声音。这在早期版本的 iOS 中是可能的,但在使用标准 API 的 iOS 8 或更高版本中是不可能的。

我现在正在寻找一种使用私有 API 来执行此操作的可能性,我已经查看了头文件,但我没有找到合适的。我猜想存在这样的 API,但我不知道是哪个。任何建议表示赞赏。

请注意,使播放和暂停按钮显示的解决方案是不可接受的。另请注意,我正在寻找一个私有 API,并且我知道与我使用私有 API 这一事实相关的所有问题。此外,当用户将静音开关设置为打开时播放声音在某些情况下会使用户生气,但在这种情况下,如果没有声音他们会生气(想想闹钟)。

编辑:需要从后台执行此操作,例如在接收推送通知时。

【问题讨论】:

    标签: ios iphone iphone-privateapi


    【解决方案1】:

    您没有指定语言,所以我将只使用 Swift。代码并没有得到很好的保护,但基本上你需要将AVAudioSession单例的类别设置为AVAudioSessionCategoryPlayback

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    

    // Then just play the file
    guard let soundPath = NSBundle.mainBundle().pathForResource("sound", ofType: "wav") else {
        // bad path
        return
    }
    
    var soundFile = NSURL.fileURLWithPath(soundPath)
    
    // Instance variable
    player = try AVAudioPlayer(contentsOfURL: soundFile)
    player.play()
    

    【讨论】:

    • 感谢您的回复。 2个问题。我已经将音频会话设置为 AVAudioSessionCategoryPlayAndRecord 用于其他目的。我想我不能做 AVAudioSessionCategoryPlayAndRecord|AVAudioSessionCategoryPlayback ?第二个问题,这不会显示播放和暂停按钮吗?我也忘了提到我需要从后台执行此操作。
    • 1.不,你不能这样做,因为这只是一个字符串。但是您可能会根据即时需求更改它正在使用的类别?虽然不确定您的具体用例。 -- -- -- 2. 不在我的任何测试中。它甚至不能通过上滑菜单暂停。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2013-01-24
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多