ios - AVAudioPlayer 在某些设备上无法播放

标签 ios ipad avaudioplayer

我的代码在运行 iOS 9.0.2 的模拟器、iPad-4 和 iPhone 6+ 上完美运行。

但是,我知道这是一个奇怪的说法,在我的 iPad Air 2 上,它看起来可以正常工作,但实际上什么也没听到。也在其他设备上重现,例如另一台 iPhone 6+ 和另一台运行 iOS 8.4 的 iPhone 6。我创建了一个演示项目(下面的链接),以便其他人可以尝试他们自己的设备。

我正在这样做:

  1. 使用 [[NSBundle mainBundle] resourcePath] 下的路径初始化 NSURL *url:
    /var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My App.app/sndEfcts/!snap.mp3
  2. 将新对象分配给 ivar:

    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
    
  3. 在调试器中测试 url - 很好! (注意空间变成了%20。我还验证了该文件存在):

    (lldb) po audioPlayer.url
    file:///var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My%20App.app/sndEfcts/!snap.mp3`
    
  4. 如果创建成功则播放:

    if (audioPlayer) {
        audioPlayer.delegate = self;
        [audioPlayer prepareToPlay];
        __unused BOOL playOk = [audioPlayer play];
    }
    
  5. 完成委托(delegate)已激活: - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)播放成功:(BOOL)flag
    ...旗帜说"is"! - 但什么也没听到:(

所以一切似乎都正常,但仍然听不到任何声音(尽管其他应用程序的其他声音确实工作正常)

有人知道这种行为的原因吗?

编辑

我创建了一个 simple project展示。它发生在各种设备上,甚至在 8.4 上也是如此。在模拟器上它始终有效

最佳答案

我已经找到解决办法了。

在有问题的设备上,“静音”处于打开状态,影响了设备中的一些声音。为了防止这种情况,请在应用程序开头的某个位置调用它:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

这将导致音频被视为播放,因此不会被静音选项静音。

据我所知,用户通常不知道在哪里可以找到静音开/关控件。在 iPad Air 2 上:从底部抬起下部 Pane ,然后按扬声器图标。

关于ios - AVAudioPlayer 在某些设备上无法播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995335/

相关文章:

ios - 将代码保留在 <# #> 括号中

iphone - UISlider 问题 - 如何检测用户在 iOS 中释放 slider 按钮?

swift - 使用 AVAudioPlayer 解包 Optional 值时意外发现 nil

ios - 引用 TableView 单元格时出错

ios - 从解析后端删除后解析图像文件在应用程序中持久存在

ios - iOS7 bar标题过长时UINavigationBar后退按钮标题被隐藏

iPad:可以使用多个流动列的表格 View 吗?

ios - 如何使 iPhone 4 应用程序适应所有 iOS 尺寸?

ios - AVAudioEngine 在连接 AVAudioPlayerNode 输出时抛出异常

ios - 在呈现 ViewController 应用程序时收到内存警告