Android Safe Media分析

一.使用场景
Safe Media,字面意思是安全音量。前提是有耳机插入,并且有音乐或者FM播放,在我们调节音量的时候,如果音量达到安全音量值,会提出系统提示,提醒用户高音量下使用耳机会损坏听力。在用户选择OK后,安全音量失效,声音可以继续调高。但是此时系统开始计时,如果累计达到20h,音量自动强制降到安全音量,并弹出系统提示,提醒用户长时间在高音量下使用会损坏听力。
二.处理逻辑
在音量的调节的实现在AudioService中,AudioService位于frameworks/base/media/java/android/media/下。
在我们点击上下键按钮调节音量时,会调用

private void adjustStreamVolume(int streamType, int direction, int flags,String callingPackage, int uid) {
     ……
            if ((direction == AudioManager.ADJUST_RAISE) &&
                    !checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device)) {
                Log.e(TAG, "adjustStreamVolume() safe volume index = "+oldIndex);
                mVolumeController.postDisplaySafeVolumeWarning(flags);
            } else if (streamState.adjustIndex(direction * step, device)) {
                // Post message to set system volume (it in turn will post a message
                // to persist). Do not change volume if stream is muted.
                sendMsg(mAudioHandler,
                        MSG_SET_DEVICE_VOLUME,
                        SENDMSG_QUEUE,
                        device,
                        0,
                        streamState,
                        0);
            }
       ……
}

首先有俩个判断,第一个direction == AudioManager.ADJUST_RAISE判断是否按音量上键,如果按下键就不用检查了。第二个判断是checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device),是检查aliasIndex + step是否超过安全音量。

private boolean checkSafeMediaVolume(int streamType, int index, int device) {
        synchronized (mSafeMediaVolumeState) {
            if(!prefs.getBoolean(firstShowSafeDialog,false) && (index > mSafeMediaVolumeIndex) &&
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值