Android物理按键事件处理

这篇具有很好参考价值的文章主要介绍了Android物理按键事件处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、重写方法,处理对应的按键回调事件

当处理物理按钮事件的时候提供的回调方法有

  • onKeyDown()
  • onKeyUp()
  • onKeyLongPress()

如下是例子:返回键被按下,提示退出程序

public class MainActivity extends Activity {
    private long exitTime = 0; //退出时间变量值
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exit();
            return true;  //拦截返回键
        }
        return super.onKeyDown(keyCode, event);
    }
    
    public void exit() {
        if ((System.currentTimeMillis() - exitTime) > 2000) { //计算按键时间差是否大于两秒
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0); //销毁强制退出
        }
    }
}

二、键值

按键名 中文名 code
KEYCODE_POWER 电源键 26
KEYCODE_HOME HOME键 3
KEYCODE_BACK 返回键 4
KEYCODE_MENU 菜单键 82
KEYCODE_CAMERA 拍照键 27
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减少键 25
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6

三、framework按键消息派发

按键消息派发(android 4.2(jb5))

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
  dispatchUnhandledKey
        interceptFallback
            interceptKeyBeforeQueueing [interceptKeyTq]
            interceptKeyBeforeDispatching [interceptKeyTi]

四、增加一个按键

底层抓键值:adb shell getevent /dev/input/event0
adb shell getevent /dev/input/event1
0001 012c 00000001 : 十六进制,012c=300

先用adb shell getevent,可以看到选项,后面的是可以选的文章来源地址https://www.toymoban.com/news/detail-410747.html

增加一个按键([android 5.16.0])

alps/device/xxx/xxx/mtk-kpd.kl
 key 300   FM

alps/frameworks/native/include/android/keycodes.h
  AKEYCODE_FM  = 300,//added for fm

alps/frameworks/native/include/input/InputEventLabels.h
static const InputEventLabel KEYCODES[] = {
    // added for fm
    DEFINE_KEYCODE(FM), //= {"FM",AKEYCODE_FM}
}

//注:宏定义函数#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key } = {"key", AKEYCODE_key}
//#是把宏参数变为一个字符串,##是把两个宏参数连接在一起

alps/frameworks/base/core/java/android/view/KeyEvent.java
    /**
     * @hide
     */
    public static final int KEYCODE_FM            = 300;
    //added for fm
    private static final int LAST_KEYCODE = KEYCODE_FM;//modify for fm

到了这里,关于Android物理按键事件处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Activity重写dump方法实现通过adb调试代码

    android为我们提供了dump方法。注释中声明该方法会将活动的状态打印到给定流中,当cmd运行“adb shell dumpsys activity”时会调用此函数。所以当我们要做一些测试,就可以在activity重写dump函数编写我们的测试逻辑。 args是adb传进来的命令参数 调用 writer.println 即可将想要打印的东

    2024年02月06日
    浏览(40)
  • Android EditText的setOnEditorActionListener方法——监听软键盘按键

    1、控件EditText的setOnEditorActionListener方法的使用 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发。 通过 布局文件 中的imeOptions可以控制软件盘右下角的按钮显示

    2024年02月10日
    浏览(41)
  • android存储3--初始化.unlock事件的处理

    android版本:android-11.0.0_r21 http://aospxref.com/android-11.0.0_r21 概述:SystemServiceManager收到unlock事件后,遍历service链表,执行各个service的onUserUnlocking。对于存储service,执行的是StorageManagerService$Lifecycle中的 onUserUnlocking,在这个方法中,存储的 StorageSessionController、vold、storaged模块进行

    2024年02月10日
    浏览(49)
  • Android开发基础4:事件处理和交互实现程序设计

    应用前提:Android开发中,事件是用户对图形界面的操作,Android应用程序通过事件和信息来实现人机交互。 事件 包括:按下、弹起、滑动、双击。 信息 包括:信息框、对话框、通知。 本节学习和Android中与事件处理和交互相关的组件及知识。 每个工程下面的模块必须做的工

    2023年04月24日
    浏览(48)
  • QGraphicsView中重写鼠标事件实现图片的移动

            本文讲的是如何在PyQt5的组件QGraphicsView中重写鼠标事件实现图片的移动。         PyQt5作为强大的GUI编程工具,免不了会拿来做一些图片的显示和处理问题,有的会使用QPainter作为动态显示图片的工具,QLabel是显示静态图片的主推。但是我在工作中遇到了超大

    2023年04月14日
    浏览(44)
  • js获取键盘按键事件、判断键盘按键事件、调用键盘按键事件

    第一:获取键盘按键事件 第二:判断键盘按键事件 第三:调用键盘按键事件

    2024年02月11日
    浏览(51)
  • [Android 13]Input系列--触摸事件在应用进程的分发和处理

    hongxi.zhu 2023-7-21 Android 13 前面我们已经梳理了input事件在native层的传递,这一篇我们接着探索input事件在应用中的传递与处理,我们将按键事件和触摸事件分开梳理,这一篇就只涉及触摸事件。 一、事件的接收 从前面的篇幅我们知道,framework native层 InputDispatcher 向应用通过s

    2024年02月15日
    浏览(37)
  • android鼠标滚轮事件监听方法

    2024年02月08日
    浏览(35)
  • Tkinter Event事件处理方法

    在Tkinter中,事件处理方法是指在用户与GUI交互时,程序响应用户的操作并执行相应的操作。以下是一些常用的事件处理方法: Button-Click事件处理方法:当用户单击按钮时,执行相应的操作。 Key-Press事件处理方法:当用户按下键盘上的某个键时,执行相应的操作。 Mouse-Click事

    2024年02月09日
    浏览(44)
  • LVGL学习(5):物理按键切换焦点之焦点保存和恢复

    最近在做的项目用到了LVGL,基于实际产品使用的特殊情况,屏幕没有接触摸屏,而是使用物理按键来控制所有的object,而且硬件上只有四个按键,功能分别是:返回、左/上、右/下和确定,在切换界面的过程中,也引出了一个焦点切换问题。

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包