http://blog.csdn.net/look85/article/details/23740761

dispatchKeyEvent和onKeyDown关系:

当键盘按下时

首先触发dispatchKeyEvent

然后触发onUserInteraction

再次onKeyDown

如果按下紧接着松开,则是俩步

紧跟着触发dispatchKeyEvent

然后触发onUserInteraction

再次onKeyUp

1)当我们重写了onKeyDown方法后,如果return false,则会继续调用系统的onKeyDown方法。

如果只想让程序调用自己写的onKeyDown,则需要return true

利用该特性可以拦截耳机耳机按键,防止启动音乐。

下面转载一下拦截屏幕按键的方法:

ComponentonKeyDown监控
1、拦截/屏蔽返回键、菜单键实现代码

1
2
3
4
5
6
7
8
9
10
11
12

@Override
public boolean (int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK) { //监控/拦截/屏蔽返回键
        processExit();
        true;
    } else if(keyCode == KeyEvent.KEYCODE_MENU) {
        //监控/拦截菜单键
    } else if(keyCode == KeyEvent.KEYCODE_HOME) {
        //由于Home键为系统键,此处不能捕获,需要重写onAttachedToWindow()
    }
    super.(keyCode,
event);
}

2、拦截/屏蔽系统Home键

1
2
3
4

public void onAttachedToWindow() {  
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  
  
     super.onAttachedToWindow();  
 
}
为什么必须重写onAttachedToWindow(),看看下面的代码就知道了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 1000行附近
if (code == KeyEvent.KEYCODE_HOME) {  
    // If a system window has focus, then it doesn't make sense  
    // right now to interact with applications.  
    WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;  
    if (attrs != null) {  
        final int type = attrs.type;  
        if (type == WindowManager.LayoutParams.TYPE_KEYGUARD  
                || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {  
                // the "app" is keyguard, so give it the key  
                return false;  
        }  
        final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;  
        for (int i=0; i<typeCount; i++) {  
            if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {  
                // don't do anything, but also don't pass it to the app  
                return true;  
            }  
        }  
    } 
}
onKeyDownonKeyDown方法比较好。
 
 

dispatchkeyevent的调用机制的更多相关文章

  1. C语言栈调用机制初探

    学习linux离不开c语言,也离不开汇编,二者之间的相互调用在源代码中几乎随处可见.所以必须清楚地理解c语言背后的汇编结果才能更好地读懂linux中相关的代码.否则会有很多疑惑,比如在head.s中会 ...

  2. ectouch第三讲之加载调用机制

    加载与调用机制:         当地址栏键入/mobile,就会加载入口文件index.php:从入口文件里面会调用EcTouch.php公共入口文件,当进入公共入口文件,会定义一些变量,然后加载公 ...

  3. Hadoop之yarn调用机制

    1,Mapper方法:如果在map方法之前执行一些程序用setup,之后用cleanup.同理在Reducer方法中也有setup和cleanup. 2,map任务是并行执行,没有谁先谁后,如果是两个 ...

  4. 8.9.网络编程_Socket 远程调用机制

    1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...

  5. Java方法调用机制

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  6. Scala 基础(九):Scala 函数式编程(一)基础(一)概念、定义、调用机制

    1 概念的说明 1)在scala中,方法和函数几乎可以等同(比如他们的定义.使用.运行机制都一样的),只是函数的使用方式更加的灵活多样. 2)函数式编程是从编程方式(范式)的角度来谈的,可以这样理解: ...

  7. Android onTouchEvent, onClick及onLongClick的调用机制

    针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件? 在Android中,一次用户操作可以被不同的View按次序 ...

  8. java gc的调用机制 和编程规则

    转载:http://sunzhyng.iteye.com/blog/480148 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求 ...

  9. android JNI调用机制

    JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此Native语言和Java代码都运行在JVM的宿主 ...

随机推荐

  1. javascript循环

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 提升你的Java应用性能:改善数据处理

    许多应用程序在压力测试阶段或在生产环境中都会遇到性能问题.如果我们看一下性能问题背后的原因,会发现很多是由数据处理不当造成.数据处理在应用面对大数据量时是非常关键的.这里有一些实用的数据处理技巧可以帮 ...

  3. (转载)AS3中的mouseEnabled与mouseChildren

    (转载)http://www.cnblogs.com/gongchen/archive/2013/05/09/3069055.html mouseEnabled与mouseChildren都是用来确定 ...

  4. 解决Subclipse1.6在64位JDK下不可用的问题

    Failed to load JavaHL Library.  These are the errors that were encountered:   需要下载SVNKit Adapter Sub ...

  5. 分布式基础通信协议:paxos,totem和gossip

    转:http://blog.csdn.net/cloudresearch/article/details/23127985 背景: 在分布式中,最难解决的一个问题就是多个节点间数据同步问题.为了解决这 ...

  6. Linux学习笔记32——select()函数分析【转】

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...

  7. Linq左右連接

    1.左连接: var LeftJoin = from emp in ListOfEmployeesjoin dept in ListOfDepartmenton emp.DeptID equals d ...

  8. Genotype&&陨石的秘密

    Genotype: Genotype 是一个有限的基因序列.它是由大写的英文字母A-Z组成,不同的字母表示不同种类的基因.一个基因可以分化成为一对新的基因.这种分化被一个定义的规则集合所控制.每个分化 ...

  9. kvm 性能调优

    CPU Tuning Cache share tuning 对于物理 CPU,同一个 core 的 threads 共享 L2 Cache,同一个 socket 的 cores 共享 L3 cache ...

  10. Yii之权限管理扩展 srbac

    最近在研究 Yii 的权限控制功能,尽管Yii 自身提供了一个简单的权限管理,但是很多时候,我们还是需要对其做一点扩展. 在这里,我向大家推荐一个不错的扩展:SRBAC. 在Yii的官方网站的exte ...