Android P按键静音流程

编程入门 行业动态 更新时间:2024-10-05 15:23:59

Android P按键<a href=https://www.elefans.com/category/jswz/34/1765596.html style=静音流程"/>

Android P按键静音流程

今天跟了一下Android系统按键静音的流程,Android实现了在系统层面静音。输出给底层的音量为0。

按键使用注入按键方式实现,静音按键值:

public static final int KEYCODE_VOLUME_MUTE     = 164;

注入方式:

KeyEvent k = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_VOLUME_MUTE);
InputManager.getInstance().injectInputEvent(key, 0);

或者:

simulateKey(KeyEvent.KEYCODE_VOLUME_MUTE);public static void simulateKey(final int KeyCode) {new Thread() {@Overridepublic void run() {try {Instrumentation inst = new Instrumentation();inst.sendKeyDownUpSync(KeyCode);} catch (Exception e) {Log.e("hello", e.toString());}}}.start();
}

调用流程:
DecorView.java --> PhoneWindow.java --> MediaSessionService.java

窗口监听Key消息的过程省略过,在Input输入系统中已经分析过。

\frameworks\base\services\core\java\com\android\server\media\MediaSessionService.java
dispatchVolumeKeyEvent()
dispatchVolumeKeyEventLocked()

\frameworks\base\services\core\java\com\android\server\audio\AudioService.java
adjustSuggestedStreamVolume()

private void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,String callingPackage, String caller, int uid) {//省略一部分代码//...// mute为truefinal boolean isMute = isMuteAdjust(direction);ensureValidStreamType(streamType);final int resolvedStream = mStreamVolumeAlias[streamType];// Play sounds on STREAM_RING only.if ((flags & AudioManager.FLAG_PLAY_SOUND) != 0 &&resolvedStream != AudioSystem.STREAM_RING) {flags &= ~AudioManager.FLAG_PLAY_SOUND;}// For notifications/ring, show the ui before making any adjustments// Don't suppress mute/unmute requestsif (mVolumeController.suppressAdjustment(resolvedStream, flags, isMute)) {direction = 0;flags &= ~AudioManager.FLAG_PLAY_SOUND;flags &= ~AudioManager.FLAG_VIBRATE;if (DEBUG_VOL) Log.d(TAG, "Volume controller suppressed adjustment");}adjustStreamVolume(streamType, direction, flags, callingPackage, caller, uid);
}
protected void adjustStreamVolume(int streamType, int direction, int flags,String callingPackage, String caller, int uid) {//省略一部分代码//...//省略一部分代码//...if (isMuteAdjust) {boolean state;if (direction == AudioManager.ADJUST_TOGGLE_MUTE) {state = !streamState.mIsMuted;} else {state = direction == AudioManager.ADJUST_MUTE;}if (streamTypeAlias == AudioSystem.STREAM_MUSIC) {setSystemAudioMute(state

更多推荐

Android P按键静音流程

本文发布于:2024-02-27 18:17:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765334.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:静音   按键   流程   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!