美文网首页
关于iOS系统响铃有趣现象背后的深入分析

关于iOS系统响铃有趣现象背后的深入分析

作者: 流年划过颜夕 | 来源:发表于2018-11-07 09:35 被阅读18次

    近期开发会有涉及铃音播放,所以深入研究了下当前项目中的系统响铃

    当前项目中使用了4个本地系统铃音:

    define KSSoundIDChord 0x000003EF

    define KSSoundIDRinging 0x0000047F

    define KSSoundIDSAssign 0x00000518

    define KSSoundIDSMessage 0x000003EB

    它们分别的用处如下:
    KSSoundIDChord 用于推送消息通知提示
    KSSoundIDRinging 用于远程视频声音提示
    KSSoundIDSAssign 用于会话处理声音提示
    KSSoundIDSMessage 用于聊天声音提示

    有趣的事情来了,拨动手机左上角的开关,并调整手机铃声使手机处于静音模式时,按照常理来说,不应该再有铃音响起,但是唯独KSSoundIDSAssign却依然能播放响铃。

    继续深入研究代码播放流程,发现它们都走的是同样的接口:
    AudioServicesPlaySystemSound()
    所以逻辑上不可能有错误,那估计就是系统自带音频的问题了。

    但都它们是以16进制方式获取的系统声音,找了半天也找不到它们的出处,所以无法区分它们的具体类别。

    于是将他们转化为10进制,分别对应如下:

    define KSSoundIDChord 1007

    define KSSoundIDRinging 1151

    define KSSoundIDSAssign 1304

    define KSSoundIDSMessage 1003

    再通过多方面查找发现了iOS系统铃音类别对照表:
    http://iphonedevwiki.net/index.php/AudioServices

    进行对比音频ID,其详细对应类别结果如下:
    SoundID File name(iPhone) File name(iPod Touch) Category

    1003 ReceivedMessage.caf ReceivedMessage.caf SMSReceived

    1007 sms-received1.caf sms-received1.caf SMSReceived_Alert

    1151 vc~ringing.caf vc~ringing.caf VCRinging

    1304 alarm.caf sq_alarm.caf SystemSoundPreview

    发现KSSoundIDSAssign对应的音频类别是:
    由于SystemSoundPreview为系统声音预览,alarm.caf为闹钟类长铃音,权限更高,不受系统静音的约束,所以它能响铃

    由此可见,iOS中决定系统铃音是否响铃还受系统音频的权限级别影响

    相关文章

      网友评论

          本文标题:关于iOS系统响铃有趣现象背后的深入分析

          本文链接:https://www.haomeiwen.com/subject/gvsmxqtx.html