android開發之耳機調至最大音量時,提示損傷聽力java
經過提示語,咱們能夠查出,只要的邏輯代碼是在framework/base/packages/SystemUI/src/com/android/systemui/SafetyWarningDialog.javaandroid
查看代碼可知,在這個類的構造函數中,首先初始化了一個dialog安全
public SafetyWarningDialog(Context context, AudioManager audioManager) { 45 super(context); 46 mContext = context; 47 mAudioManager = audioManager; 48 49 getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); 50 setMessage(mContext.getString(com.android.internal.R.string.safe_media_volume_warning)); 51 setButton(DialogInterface.BUTTON_POSITIVE, 52 mContext.getString(com.android.internal.R.string.yes), this); 53 setButton(DialogInterface.BUTTON_NEGATIVE, 54 mContext.getString(com.android.internal.R.string.no), (OnClickListener) null); 55 setOnDismissListener(this); 56 57 final IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 58 context.registerReceiver(mReceiver, filter); 59 }
當用戶作按鍵操做時,會調用相關的listener 函數,具體的代碼實現以下:ide
@Override 64 public boolean onKeyDown(int keyCode, KeyEvent event) { 65 if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) { 66 mNewVolumeUp = true; 67 } 68 return super.onKeyDown(keyCode, event); 69 } 70 71 @Override 72 public boolean onKeyUp(int keyCode, KeyEvent event) { 73 if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mNewVolumeUp 74 && (System.currentTimeMillis() - mShowTime) > KEY_CONFIRM_ALLOWED_AFTER) { 75 if (D.BUG) Log.d(TAG, "Confirmed warning via VOLUME_UP"); 76 mAudioManager.disableSafeMediaVolume(); 77 dismiss(); 78 } 79 return super.onKeyUp(keyCode, event); 80 } 81 82 @Override 83 public void onClick(DialogInterface dialog, int which) { 84 mAudioManager.disableSafeMediaVolume(); 85 } 86
mAudioManager.disableSafeMediaVolume(); //關閉安全音量提
若是說平臺須要,能夠經過config xml配置,將config_safe_media_volume_enabled 置false 來關閉此功能