Android APP:检测实体按键事件
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:检测实体按键事件相关推荐
- 屏蔽Android系统的WIFI功能 关闭Android系统的实体按键
屏蔽Android系统的WIFI功能: 1.要root手机 2.安装re管理器 3.进入手机内存/system/bin/wpa_supplicant(文件无后缀). 4.re管理器改成读写模式后, ...
- android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新
<Android APP该有的东西>之功能篇:版本检测更新 自从友盟的自动更新下线之后,一大批app选择了自己写更新逻辑.是的,这里的逻辑并不复杂,完全可以自己写,但是不复杂不代表不麻烦, ...
- android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...
在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...
- Android APP 检测和监听当前USB设备插入拔出以及读取VID/PID
一.列出所有的usb device设备,打印vip pid private boolean AllDeviceConnected(){UsbManager manager = (UsbManager) ...
- Android系统中自定义按键的短按、双击、长按事件
在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...
- Android 监听Home键按键事件
Android 监听Home键按键事件 标签(空格分隔):Android Home键 在Android开发中有很多按键事件需要在App中捕获从而做出一些针对性的操作,例如返回键,音量键等都可以直接在d ...
- Android按键事件——上层与驱动的映射
http://blog.csdn.net/zengdaquan007/article/details/8686431 首先查看android对上层按键事件的定义,在头文件<KeycodeLabe ...
- android 原生按键事件触发
在项目中遇到了这样的问题,系统层修改了android原生逻辑,按键事件有mcu直接上报,没有走android原生的事件分发流程,因此不会触发onKeyDown/onKeyUp方法的回调,可以使用如下方 ...
- Android事件处理之处理键盘事件
1.在Android开发中,首先和用户交互的是界面,接着就是事件处理,对于如今的图形界面应用程序,都是通过事件来实现人机交互的.事件就是用户对图形界面的操作,在Android手机和平板电脑上,主要包括 ...
最新文章
- 使用dwz框架搭建网站后台
- Css实现的鼠标滑动选项卡菜单代码
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
- ECCV 2016《SSD: Single Shot MultiBox Detector》论文笔记
- IBASE save - my toolset investigation
- (转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
- list 排序_十个必知的排序算法|Python实例系列
- html怎么把一段文字设置为连接到下一个网页的按钮,网页设计三合一模拟试题(一)...
- 【计算机系统设计】学习笔记(2)
- Coolite动态加载CheckboxGroup,无法在后台中获取
- SpringMVC RedirectView的使用以及源码分析
- Linux 如何将eth1网卡修改为eth0
- 完工后的决算书范本_工程决算书范本
- 编译OpenCV:precomp.hpp:60:37: fatal error: dynlink_nvcuvid.h
- QQ头像加口罩PHP,如何用人脸识别自动给头像添加口罩及护目镜
- SSM框架整合步骤思路及案例分析
- 使用alter database create datafile恢复丢失数据文件
- FPGA实现和ET1100通信verilog源码。 ethercat从站方案
- win10解决安装时的2503 2502问题
- python怎么建立画板_Python3使用PyQt5制作简单的画板/手写板实例
热门文章
- Android开发需求功能一览表
- (附源码)计算机毕业设计SSM基于的民宿租赁系统
- Git教程之Linux平台
- 请问你见过吐代码的泡泡吗(冒泡排序)
- 文化产业杂志文化产业杂志社文化产业编辑部2023年第5期目录
- 最大流最小割实现matlab,STOER-WAGNER算法求解无向图最大流最小割(无指定源点汇点)...
- openwrt信号弱掉线_如何使用openwrt路由系统剔除弱信号设备?
- 双系统-Windows与Linux
- CuteOne搭建个人云盘最全教学!
- 【火狐浏览器】Firefox如何恢复卸载后的书签【图文秒懂】