Android APP:检测实体按键事件

一、检测点击按键事件一般不对手机上的输入按键进行处理,直接由系统按照默认情况操作。当然有时为了改善用户体验,需要让应用拦截按键事件,并进行额外处理。 要想监控按键事件,首先得知道每个按键的编码,这样才能根据不同的编码值进行相应的处理。监听器OnKeyListener只会检测控制键,不会检测文本键。实际测试发现HOME、SWICH、POWER普通的app是接收不到事件的,这几个事件在framew里面处理了

二、部分控制键KEYCODE

三、测试代码

1、android_studio_app\keyeventdemo\app\src\main\java\com\example\keyeventdemo\MainActivity.java

package com.example.keyeventdemo;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {private TextView key_result;private String desc = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);key_result = (TextView) findViewById(R.id.key_result);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);key_result = (TextView) findViewById(R.id.key_result);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {desc = String.format("%sphysical key coce is %d", desc, keyCode);if (keyCode == KeyEvent.KEYCODE_BACK) {desc = String.format("%s, KEYCODE_BACK", desc);} else if (keyCode == KeyEvent.KEYCODE_MENU) {desc = String.format("%s, KEYCODE_MENU", desc);} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {desc = String.format("%s, KEYCODE_VOLUME_UP", desc);} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {desc = String.format("%s, KEYCODE_VOLUME_DOWN", desc);}else  {desc = String.format("%s, KEYCODE_VOLUME is unknown", desc);}desc = desc + "\n";key_result.setText(desc);//返回true表示不再响应系统动作,返回false表示继续响应系统动作return true;// return  false;}
}

2、布局文件  activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:id="@+id/tv_hard"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="center"android:text="please press the physics button"android:textSize="16sp" /><TextViewandroid:id="@+id/key_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="16sp" /></LinearLayout>

四、附加长按检测

 private boolean shortPress = false;@Overridepublic boolean onKeyLongPress(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_3) {shortPress = false;//长按要执行的代码Log.e("onKeyLongPress", "onKeyLongPress");return true;}return false;}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_3) {if (event.getAction() == KeyEvent.ACTION_DOWN) {event.startTracking(); //只有执行了这行代码才会调用onKeyLongPress的;if (event.getRepeatCount() == 0) {shortPress = true;}return true;}}return super.onKeyDown(keyCode, event);}@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_3) {if (shortPress) {//短按要执行的代码Log.e("onKeyUp", "onKeyUp");}shortPress = false;return true;}return super.onKeyUp(keyCode, event);}

五、测试效果

Android APP:检测实体按键事件相关推荐

  1. 屏蔽Android系统的WIFI功能 关闭Android系统的实体按键

    屏蔽Android系统的WIFI功能: 1.要root手机  2.安装re管理器 3.进入手机内存/system/bin/wpa_supplicant(文件无后缀). 4.re管理器改成读写模式后, ...

  2. android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新

    <Android APP该有的东西>之功能篇:版本检测更新 自从友盟的自动更新下线之后,一大批app选择了自己写更新逻辑.是的,这里的逻辑并不复杂,完全可以自己写,但是不复杂不代表不麻烦, ...

  3. android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...

    在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...

  4. Android APP 检测和监听当前USB设备插入拔出以及读取VID/PID

    一.列出所有的usb device设备,打印vip pid private boolean AllDeviceConnected(){UsbManager manager = (UsbManager) ...

  5. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  6. Android 监听Home键按键事件

    Android 监听Home键按键事件 标签(空格分隔):Android Home键 在Android开发中有很多按键事件需要在App中捕获从而做出一些针对性的操作,例如返回键,音量键等都可以直接在d ...

  7. Android按键事件——上层与驱动的映射

    http://blog.csdn.net/zengdaquan007/article/details/8686431 首先查看android对上层按键事件的定义,在头文件<KeycodeLabe ...

  8. android 原生按键事件触发

    在项目中遇到了这样的问题,系统层修改了android原生逻辑,按键事件有mcu直接上报,没有走android原生的事件分发流程,因此不会触发onKeyDown/onKeyUp方法的回调,可以使用如下方 ...

  9. Android事件处理之处理键盘事件

    1.在Android开发中,首先和用户交互的是界面,接着就是事件处理,对于如今的图形界面应用程序,都是通过事件来实现人机交互的.事件就是用户对图形界面的操作,在Android手机和平板电脑上,主要包括 ...

最新文章

  1. 使用dwz框架搭建网站后台
  2. Css实现的鼠标滑动选项卡菜单代码
  3. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
  4. ECCV 2016《SSD: Single Shot MultiBox Detector》论文笔记
  5. IBASE save - my toolset investigation
  6. (转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
  7. list 排序_十个必知的排序算法|Python实例系列
  8. html怎么把一段文字设置为连接到下一个网页的按钮,网页设计三合一模拟试题(一)...
  9. 【计算机系统设计】学习笔记(2)
  10. Coolite动态加载CheckboxGroup,无法在后台中获取
  11. SpringMVC RedirectView的使用以及源码分析
  12. Linux 如何将eth1网卡修改为eth0
  13. 完工后的决算书范本_工程决算书范本
  14. 编译OpenCV:precomp.hpp:60:37: fatal error: dynlink_nvcuvid.h
  15. QQ头像加口罩PHP,如何用人脸识别自动给头像添加口罩及护目镜
  16. SSM框架整合步骤思路及案例分析
  17. 使用alter database create datafile恢复丢失数据文件
  18. FPGA实现和ET1100通信verilog源码。 ethercat从站方案
  19. win10解决安装时的2503 2502问题
  20. python怎么建立画板_Python3使用PyQt5制作简单的画板/手写板实例

热门文章

  1. Android开发需求功能一览表
  2. (附源码)计算机毕业设计SSM基于的民宿租赁系统
  3. Git教程之Linux平台
  4. 请问你见过吐代码的泡泡吗(冒泡排序)
  5. 文化产业杂志文化产业杂志社文化产业编辑部2023年第5期目录
  6. 最大流最小割实现matlab,STOER-WAGNER算法求解无向图最大流最小割(无指定源点汇点)...
  7. openwrt信号弱掉线_如何使用openwrt路由系统剔除弱信号设备?
  8. 双系统-Windows与Linux
  9. CuteOne搭建个人云盘最全教学!
  10. 【火狐浏览器】Firefox如何恢复卸载后的书签【图文秒懂】