在APK里 截获 系统按键 并处理
来源:互联网 发布:xampp怎么配置mysql 编辑:程序博客网 时间:2024/06/09 19:58
一、前沿
我们在做应用程序的时候,可能有这样的需求:音量加减按键用做翻页功能,而不调节音量。或者菜单键不用于显示菜单,而用于弹出一个对话框。
这些需求就需要我们在应用里自定义这些按键的处理,而不让系统去处理。这里就记录如何实现这样的需求。
截获系统按键的实现方式分为两种,一种是普通系统按键(如 back 、menu),一种是特殊系统按键(如 home),下面分别说明。
二、普通系统按键的截获方式
以处理 back 键为例,
在Activity里重载 public boolean dispatchKeyEvent(KeyEvent event) 方法,判断键值,如果是KeyEvent.KEYCODE_BACK则返回 true,代码如下:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int key = event.getKeyCode();
int keyaction = event.getAction();
//Log.i(TAG, "[test] dispatchKeyEvent event = " + event);
if (key == KeyEvent.KEYCODE_BACK ) {
Log.i(TAG, " catch BACK event!! keyaction: "+keyaction);
if(keyaction==0){
//处理 back键按下
}
if(keyaction==1){
//处理 back 键弹起
}
return true;
}
return super.dispatchKeyEvent(event);
}
三、特殊系统按键的截获方式
以home键为例,实现步骤如下:
1.在AndroidManifest.xml 里添加权限
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
2.在Activity里重载 public void onAttachedToWindow() ,设置参数让系统不处理home键,代码如下:
@Override
public void onAttachedToWindow()
{
// TODO Auto-generated method stub
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
3.自定义按键处理,重载onKeyDown 、onKeyUp 方法,例如处理弹起动作:
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_HOME:
//处理home键弹起
Log.d(TAG,"HOME key up test!");
break;
}
return super.onKeyUp(keyCode, event);
}
- 在APK里 截获 系统按键 并处理
- 截获按键,做相应处理。
- MFC截获消息并处理
- 在C#里截获Windows消息
- 截获CHtmlView中的DragDrop事件并处理
- 在应用层来截获数据链路层的帧并对其处理
- 在应用层来截获数据链路层的帧并对其处理
- 如何截获并替换系统最小化功能
- Android上如何让应用截获系统按键
- 利用勾子监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理
- Windows下截获程序的异常并进行处理
- 针对VFS截获系统调用的各种bug处理
- 10 在ZStack里的按键驱动
- 以android状态栏虚拟按键消息为例学习在input系统插入按键消息的处理
- 关于使用 FLAG_HOMEKEY_DISPATCHED 标志在应用层截获 HOME 按键的说明
- android 如何实现apk search出现在系统的推荐列表里
- 在linux操作系统中如何截获系统调用
- 在Linux操作系统中如何截获系统调用
- ajax同步、异步问题
- 新浪微博,腾讯微博mysql数据库主表猜想
- QT的字符编码转换 .
- Android OTA 升级(二): 脚本 ota_from_target_files
- 新浪微博,腾讯微博另一种实现方式--pull
- 在APK里 截获 系统按键 并处理
- Win7下怎么同时打开多个独立的Excel窗口
- vs2012的性能分析
- Tomcat6源代码启动时报错java.lang.ClassNotFoundException: listeners.ContextListener
- Ubuntu上安装Apache、MySql和PHP
- 用状态机实现XML解析器 - C++环境
- Java性能优化技巧集锦 .
- Statement和PreparedStatement之间的区别
- python time,datetime,string转换