事情原由:
公司有个商家版的App, 收款时有个语音播报的功能, 但是周天时老板说有个客户反馈这这两天的收款到账语音播报没有声音, 然后经理找我测试了下(不在公司, 电话里配合经理测试), 竟然发现iOS12的手机可以播报, iOS11.4的不能播报, 确实周五因为生产证书过期重新配置了, 但是测试时也没问题的(我的iOS12), 所以不可能是极光推送证书的问题啦. 初步怀疑是iOS11系统的问题, 因为我没有手机测试不了. 经理说不急, 周一回来再测吧.
原因分析:
周一, 我拿着iOS11.4的手机跑了一下, 测试没有播报的声音, 但是能收到推送通知, 检测了手机是否为静态, 然后进入程序调大音量, 看是不是音量小导致的, 但是没仔细看只注意到音量条调最大, 还是没声音, 这时我想是不是手机有点毛病, 打开个有背景音的应用看看? 所以打开了吃鸡游戏, 果然有声音, 还调节了一下, 注意到了音量调, 也注意到了音量条上文字“音量”, 然后我想到了什么, 回到我们的应用, 在次调节音量, 音量条上的文字变成了“铃声”, 这下子明白了. 因为我再吃鸡那里把声音音量调大了, 回到我们的应用再次测试, 这下果然听到了久违的收款播报声音.
分析结果:
音量按钮调节的声音有几种模式:调节铃声的(系统的声音音量), 调节音量的(多媒体的音量).
解决一:
为了实现我们进入应用按钮音量键调节的是多媒体的音量, 我找到一个方法:到设置了设置
-
1.打开设置, 找到声音与触感
-
2.进入声音与触感, 关闭“用按钮调整”
设置完成后进入应用调节声音, 此时变成调节多媒体的音量了, 但是这里有个问题, 我们设置了系统设置, 必定回影响手机其他地方, 这样不大好, 这个得优化.
解决二:
就吃鸡而言, 在没有设置系统声音按钮键的时, 音量按钮调节的是铃声, 进入吃鸡游戏时, 调节变为多媒体音量, 这里肯定有有个API设置系统音量控制的, 于是查找资料终于找到了答案:
如下:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
这个API就是设置按钮控制多媒体音量的, YES
为按钮控制多媒体音量, NO
控制铃声音量.
我们想要实现的效果是进入程序中, 声音按钮控制多媒体音量, 不受系统设置影响, 也不影响其他地方的设置. 实现:
在AppDelegate.m文件中加入
最后:
至于客户那边, 按解决一方案设置, 还是没有声音, 最后是重启手机, 才有了播报声音(这就有点坑了).
在这里想说的时, 重启很强大, 遇到问题先重启, 重启都解决不了问题才是真的有问题.这时再慢慢找问题,解决问题吧.