AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) 不生效

最近在做一个项目用到系统震动,最合适满足需求的是 iOS系统 api 提供的 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate),于是就高兴的调用了这强大的函数;比较诡异的是当把手机打开震动反馈与铃音提示,开始一直不震动最后查看官网的说法:



根据官方文档说法有些设备不支持,但我的设备是 iOS14,并且是iPhone11 这个设备单独运行demo是可以震动的,但为什么在项目里不震动呢???

开始探索,在调用AudioServicesPlaySystemSound 之前我打印了下 AVAudioSession.sharedInstance().category 发现是 当前的category是 playAndRecord 于是查在此category下是否有问题,在category record 与playAndRecord 下不生效,这下暂时死心了,但后来发现在某些场景下 AVAudioSession的category同样是  playAndRecord 可以震动!!再次感到诡异!不是不能震动吗? 于是乎有查啊查,看除了category还有没有其他影响震动生效的,黄天不负有心人,最终发现 AVAudioSession 里有个mode,当category为 playAndRecord,mode为 defualt时,震动不生效,当我把mode 设置成 voiceChat 时可以震动!!!

于是终于解决了问题,话说这样无脑的将mode 设置成voiceChat 会有影响吗?

于是查了官方文档关于  voiceChat 的解释 https://developer.apple.com/documentation/avfoundation/avaudiosession/mode/1616455-voicechat  原来这个mode是对多路音频的优化,即使不手动设置 voiceChat,如果用了Voice-Processing I/O 模块,系统也会将mode隐式设置成 voiceChat,如果预先设置了为voiceChat,且用了Voice-Processing I/O 的api mode不会改变,原文如下:



最后可以愉快的将 AVAudioSession 的mode 改成 voiceChat了,然后 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) 运行正常了!!!问题解决!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容