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

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();
    }

猜你喜欢

转载自blog.csdn.net/youthking1314/article/details/129622740
今日推荐