监听音量按键
Hook了Android系统中所有Activity的onKeyDown方法,主要用于监听并处理音量键的按下事件:
- 监听目标:所有Activity的按键事件
- 特别关注:音量+键(KeyCode 24)和音量-键(KeyCode 25)
- 执行时机:在系统处理按键事件后触发(后置Hook)
- 典型应用:修改音量键功能、添加快捷操作等
代码概览
lua
hook{
class="android.app.Activity",
method="onKeyDown",
params={"int","android.view.KeyEvent"},
before=function(it)
local context = it.thisObject
local keyCode = it.args[0]
if keyCode == 24 then
-- 音量+键处理
end
if keyCode == 25 then
-- 音量-键处理
end
end
}通过上下文context可以进行UI相关的操作
| 操作 | 代码示例 | 说明 |
|---|---|---|
| 显示Toast | Toast.makeText(context, "text", Toast.LENGTH_SHORT).show() | 弹出提示 |
| 弹对话框 | AlertDialog.Builder(context).setTitle(...).show() | 显示系统对话框 |
| 获取屏幕尺寸 | context.getResources().getDisplayMetrics().widthPixels | 屏幕宽度/高度 |
| 获取状态栏高度 | context.getResources().getIdentifier("status_bar_height", "dimen", "android") | 读取系统状态栏高度 |
关键参数
it.args[0]对应方法的第一个参数(KeyCode)it.thisObject获取当前Activity上下文
使用场景
- 修改默认音量键行为
- 实现自定义快捷键功能
- 禁用特定按键功能
- 记录用户按键操作
Android 按键 KeyCode 对照表
| 按键名称 | KeyCode | 常量名 | 备注 |
|---|---|---|---|
| 音量控制 | |||
| 音量+ | 24 | KEYCODE_VOLUME_UP | |
| 音量- | 25 | KEYCODE_VOLUME_DOWN | |
| 静音 | 164 | KEYCODE_VOLUME_MUTE | |
| 导航键 | |||
| 返回键 | 4 | KEYCODE_BACK | |
| 主页键 | 3 | KEYCODE_HOME | 需要系统级权限 |
| 最近任务 | 187 | KEYCODE_APP_SWITCH | |
| 菜单键 | 82 | KEYCODE_MENU | |
| 媒体控制 | |||
| 播放/暂停 | 85 | KEYCODE_MEDIA_PLAY_PAUSE | |
| 下一曲 | 87 | KEYCODE_MEDIA_NEXT | |
| 上一曲 | 88 | KEYCODE_MEDIA_PREVIOUS | |
| 停止播放 | 86 | KEYCODE_MEDIA_STOP | |
| 数字键 | |||
| 0-9 | 7-16 | KEYCODE_0-KEYCODE_9 | |
| 字母键 | |||
| A-Z | 29-54 | KEYCODE_A-KEYCODE_Z | |
| 功能键 | |||
| 电源键 | 26 | KEYCODE_POWER | 需要系统级权限 |
| 相机键 | 27 | KEYCODE_CAMERA | |
| 搜索键 | 84 | KEYCODE_SEARCH | |
| 方向键 | |||
| 上 | 19 | KEYCODE_DPAD_UP | |
| 下 | 20 | KEYCODE_DPAD_DOWN | |
| 左 | 21 | KEYCODE_DPAD_LEFT | |
| 右 | 22 | KEYCODE_DPAD_RIGHT | |
| 确定 | 23 | KEYCODE_DPAD_CENTER | |
| 游戏控制 | |||
| L1/R1 (肩键) | 102/103 | KEYCODE_BUTTON_L1/R1 | |
| A/B/X/Y | 96-99 | KEYCODE_BUTTON_A-Y | |
| 特殊按键 | |||
| 截图 | 120 | KEYCODE_SYSRQ | Android 4.0+ |
| 语音助手 | 231 | KEYCODE_VOICE_ASSIST | |
| 外接键盘Enter | 66 | KEYCODE_ENTER |
触摸事件对照表
| 事件类型 | 说明 |
|---|---|
ACTION_DOWN | 手指按下 (代码值: 0) |
ACTION_UP | 手指抬起 (代码值: 1) |
ACTION_MOVE | 手指移动 (代码值: 2) |
ACTION_CANCEL | 事件取消 (代码值: 3) |
注:完整常量定义见 KeyEvent 官方文档
