插入耳机后去除调大音量安全提醒对话框。更改默认安全最大音量(插上耳机后)。更改默认各类型音量。

文章详细介绍了如何在Android系统中设置和控制安全媒体音量,包括在config.xml中配置安全音量指数和启用状态,AudioService.java中的逻辑处理,以及VolumeDialogImpl.java中显示安全警告的代码段。当默认最高音量被视为安全时,系统不会弹出警告对话框。
摘要由CSDN通过智能技术生成

S版本为例

方法一:

frameworks/base / core/res/res/values/config.xml

<integer name="config_safe_media_volume_index">10</integer>
<bool name="config_safe_media_volume_enabled">true</bool>

这个原理是在

base/services/core/java/com/android/server/audio/AudioService.java

安全弹框是在

private void onConfigureSafeVolume(booleanforce, String caller) {

boolean safeMediaVolumeEnabled =
                       SystemProperties.getBoolean("audio.safemedia.force", false)
                        ||mContext.getResources().getBoolean(
                                com.android.internal.R.bool.config_safe_media_volume_enabled);

最大安全音量是在构造方法里做的默认值, publicAudioService(Context context) {

mSafeMediaVolumeIndex =mContext.getResources().getInteger(
               com.android.internal.R.integer.config_safe_media_volume_index) * 10;

更改默认音量也可以在这里改,(当然在AudioSystem里面也有默认数组值。)

比如

int defaultAlarmVolume =SystemProperties.getInt("ro.config.alarm_vol_default", -1);
       if (defaultAlarmVolume != -1 &&
                defaultAlarmVolume <=MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]) {
           AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_ALARM] =defaultAlarmVolume;
       } else {
           // Default is 6 out of 7 (default maximum), so scale accordingly.
           AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_ALARM] =
                        6 *MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM] / 7;
       }
 

有个判断是否是超过安全音量的 方法

private boolean checkSafeMediaVolume(intstreamType, int index, int device) {
       synchronized (mSafeMediaVolumeStateLock) {
           if ((mSafeMediaVolumeState ==SAFE_MEDIA_VOLUME_ACTIVE) &&
                   (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) &&
                    ((device &mSafeMediaVolumeDevices) != 0) &&
                    (index >safeMediaVolumeIndex(device))) {
                return false;
           }
           return true;
       }
    }

所以说其实默认最高音量就是安全音量的话,其实不需要false也不会弹框

方法二:

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java

private void showSafetyWarningH(int flags){
       if ((flags & (AudioManager.FLAG_SHOW_UI |AudioManager.FLAG_SHOW_UI_WARNINGS)) != 0
                || mShowing) {
           synchronized (mSafetyWarningLock) {
                if (mSafetyWarning != null) {
                    return;
                }
                mSafetyWarning = newSafetyWarningDialog(mContext, mController.getAudioManager()) {
                    @Override
                    protected void cleanUp() {
                        synchronized(mSafetyWarningLock) {
                            mSafetyWarning =null;
                        }
                        recheckH(null);
                    }
                };
                /*/tyd/yantao 20230228 remove volumeSafetyWarning dialog
                mSafetyWarning.show();
                //*/
           }
           recheckH(null);
       }
       rescheduleTimeoutH();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值