前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主要用移动智能电视(TV)上实现视频播放器的去了解下在智能设备上的开发的相关技术。本系列将实现遥控器焦点控制,模拟鼠标点击,视频在线直播,和手机当遥控器等功能,带给你不一样的开发体验。
上篇文章中说道了触控事件,(安卓Tv开发(一)焦点控制(触控事件))但是只对MotionEvent做了细说,很多东西还是不懂怎么用触控事件,现在就做对上篇的补充吧 本文出处:http://blog.csdn.net/sk719887916
在view重写onTouchEvent方法,通过event.getAction()对不同的enent就可以处理了,代码如下
public boolean onKeyDown(int keyCode,KeyEvent event) { switch(keyCode) { case KeyEvent.KEYCODE_0: DisplayToast("你按下数字键0"); break; case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast("你按下中间键"); break;sss case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast("你按下下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast("你按下左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast("你按下右方向键"); break; case KeyEvent.KEYCODE_DPAD_UP: DisplayToast("你按下上方向键"); break; case KeyEvent.KEYCODE_ALT_LEFT: DisplayToast("你按下组合键alt+←"); break; } return super.onKeyDown(keyCode, event); }
二 dispatchkeyevent
在了解这个时间之前,先熟悉下dispatchkeyevent和onkeydown和onkeyup的关系 当键盘按下时
首先触发dispatchKeyEvent
然后触发onUserInteraction 再次onKeyDown 如果按下紧接着松开,则是俩步
紧跟着触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyUp
本文出http://blog.csdn.net/sk719887916处:
当我们重写了onKeyDown方法后,如果return false,则会继续调用系统的onKeyDown方法。如果只想让程序调用自己写的onKeyDown,则需要return true。了解关系后就看鼠标模拟事件。我们重写dispatchKeyEvent,之后就可以做相应操作。 备注:TVConstants属于个人封装的类,对应keyevent的相应类型
<span style="font-size:14px;">@Override public boolean dispatchKeyEvent(KeyEvent event) { switch(event.getKeyCode()){ case TVConstants.KEYCODE_UP: case TVConstants.KEYCODE_DOWN: case TVConstants.KEYCODE_LEFT: case TVConstants.KEYCODE_RIGHT: case TVConstants.KEYCODE_CENTER: default: break; } return super.dispatchKeyEvent(event); } </span>
三 instrumentation
Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作,代替认为操作,主要用于自动测试框架。
instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘和鼠标,如下所述:
sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键
sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键
sendPointerSync(MotionEvent event) //用于模拟Touch
sendStringSync(String text) //用于发送字符串
Instrumentation inst=new Instrumentation(); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 10, 10, 0)); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 10, 10, 0));本文出 处:http://blog.csdn.net/sk719887916/article/details/44781475
但是TV的遥控器模拟鼠标并非需要此类,也没这么复杂,具体可以拦截事件,发送模拟事件即可,欢迎阅读。
安卓实现遥控器模拟鼠标请阅读:《安卓TV开发(九) Android之模拟事件点击并实现遥控器模模拟鼠标操作》