media指令分析
来源:互联网 发布:知乎 冯大辉 离职 编辑:程序博客网 时间:2024/03/28 16:34
1, 概述
media主要是和SessionManager进行交互,进行多媒体的播放、暂停等操作。
主要有三种命令,media dispatch KEY / media list-sessions / mediamonitor.本文主要以media dispatch KEY来论述。
2, media详细流程
Media的main方法如下,
public static void main(String[] args) { (new Media()).run(args); }
调用父类的run方法,然后调用子类的onRun方法,ronRun方法如下,
public void onRun() throws Exception { mSessionService = ISessionManager.Stub.asInterface(ServiceManager.checkService( Context.MEDIA_SESSION_SERVICE)); if (mSessionService == null) { System.err.println(NO_SYSTEM_ERROR_CODE); throw new AndroidException( "Can't connect to media session service; is the system running?"); } String op = nextArgRequired(); if (op.equals("dispatch")) { runDispatch(); } else if (op.equals("list-sessions")) { runListSessions(); } else if (op.equals("monitor")) { runMonitor(); } else { showError("Error: unknown command '" + op + "'"); return; } }
对dispatch的处理会调用 runDispatch方法
private void runDispatch() throws Exception { String cmd = nextArgRequired(); int keycode; if ("play".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_PLAY; } else if ("pause".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_PAUSE; } else if ("play-pause".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE; } else if ("mute".equals(cmd)) { keycode = KeyEvent.KEYCODE_MUTE; } else if ("headsethook".equals(cmd)) { keycode = KeyEvent.KEYCODE_HEADSETHOOK; } else if ("stop".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_STOP; } else if ("next".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_NEXT; } else if ("previous".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_PREVIOUS; } else if ("rewind".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_REWIND; } else if ("record".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_RECORD; } else if ("fast-forward".equals(cmd)) { keycode = KeyEvent.KEYCODE_MEDIA_FAST_FORWARD; } else { showError("Error: unknown dispatch code '" + cmd + "'"); return; } final long now = SystemClock.uptimeMillis(); sendMediaKey(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keycode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD)); sendMediaKey(new KeyEvent(now, now, KeyEvent.ACTION_UP, keycode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD)); }
首先根据输入获取keycode,同样地2次调用sendMediaKey方法,分别是KeyEvent.ACTION_DOWN 和KeyEvent.ACTION_UP,该方法如下,
private void sendMediaKey(KeyEvent event) { try { mSessionService.dispatchMediaKeyEvent(event, false); } catch (RemoteException e) { } }
最后调用SessionService的dispatchMediaKeyEvent方法来完成的。
0 0
- media指令分析
- MSN Media协议分析
- Android Safe Media分析
- media server分析
- media
- media
- @media
- Media
- media
- BREW SDK的Media程序分析
- live555 Streaming Media 分析与开发
- live555 Streaming Media 分析与开发
- live555 Streaming Media 分析与开发
- live555 Streaming Media 分析与开发
- live555 Streaming Media 分析与开发 .
- live555 Streaming Media 分析与开发
- live555 Streaming Media 分析与开发 .
- live555 Streaming Media 分析与开发
- 位运算
- 数据结构+算法
- 同一个Activity下的fragment之间的跳转
- tcp 在调用connect失败后要不要重新socket?
- ceshi1
- media指令分析
- js中的sort()方法
- Python学习
- C#中设置Excel单元格格式
- CentOS 7 下配置java web 所需要的环境
- apache 配置文件
- viewpager中去掉滑动,保留点击功能
- UVa 100
- 【专利小王子】审查意见通知书中外文对比文件的查找以及下载