https://download.csdn.net/download/u010672559/10592732
===============
1.概述:理论上要在任何界面接收按键事件应该是系统去做处理的,apk自己起后台服务的话,服务又不能监听按键事件,但是可以用设置里面的辅助功能的AccessibilityService也可监听按键事件,但是前提是需要在设置中打开此辅助功能的开关才行,前面的网上都有demo可以参考,但是前阵子遇到的需求是客制化的机器,里面的系统原生的settings已被裁剪及修改,且不能修改源码,所以以上方法都不行,但是机器是root的机器,所以网上找了只能用直接读取输入设备文件的方法去实现需求,及参考系统的按键上报的流程去实现,参考的是网上的
https://github.com/radhoo/android-event-injector
这个demo,然后基于此demo做的修改实现的需求功能,具体逻辑键、见demo
2.代码逻辑说明:
接收系统开机广播后启动一个后台服务,后台服务执行起一个线程执行while死循环每隔100ms去读取设备/dev/input/event节点的event的值(通过jni实现,读取设备节点前需先打开节点,第一次在不确定设备节点时需要遍历查询是哪个节点,找到节点之后就不用遍历了),当有按键按下时event的type和value为1,
demo下载地址https://download.csdn.net/download/u010672559/10592732===============1.概述:理论上要在任何界面接收按键事件应该是系统去做处理的,apk自己起后台服务的话,服务又不能监听按键事件,但是可以用设置里面的辅助功能的AccessibilityService也可监听按键事件,但是前提是需要在设置中打开此辅助功...
在
Android
App的实际开发中,时常会需要
监听
软键盘的输入
事件
。
可通过三种
方法
进行
监听
,即dispatchEvent,KeyListener,setOnEditorActionListener这三种方式
例如:微信和QQ聊天的消息发送,你会发现他的聊天框并没有发送的控件,软键盘的换行或者某个按钮会变成发送;在某些浏览器的输入框,输入内容后,软件盘的某个按钮会有搜索的字样,还有填写内容时的完成按钮等等,这些都可以通过
监听
键盘和输入框的一些配置实现这些功能。
在Activity中重写onKeyDown、onKeyUp这些
方法
只适用于APP在前台的情况,如果将APP切换到
后台
就失效了。
经过网上一番摸索、读源码,终于把这个功能整出来了,说一下我的实现过程。
1.
后台
要获取到
事件
第一
事件
想到的肯定是广播,于是就找到了“
android
.intent.action.MEDIA_BUTTON”这个广播
2.注册
监听
这个广播后发现…这个广播压根接收不到啊,网上找了半天,有很多叫添加优先级(priority)的,可根本没用。。。
3.但功夫不负有心人,找到一篇10年前的文章
首先我们在activity_main.xml里面先定义一个Button空间
<RelativeLayout xmlns:
android
="http://schemas.
android
.com/apk/res/
android
"
xmlns:tools="http://schemas.
android
.com/tools"
键盘监控,顾名思义是在应用软件在运行时,用户在设备上的一举一动都将被详细记录下来,更多的实在使用者毫无觉察的情况下将屏幕内容以图片的形式、
按键
内容以文本文档的形式保存在指定的文件夹或发送到指定的邮箱。键盘监控,包括物理
按键
与软键盘的监控,通常监控的
事件
有:点击,长按,滑动等,这些时间在
Android
上表现出来的都是一系列的KeyEvent。
为了实现键盘的监控,从新开发一个输入法是不现
用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown
事件
,实现的效果如下:
实现代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
好久没来更新文章了,因为没有找到自己的博客地址。。。我也说不清楚是怎么回事,几乎把所有的用户名密码都试过来了,就是没有找到,忽然间又找到了,神奇^-^
写的不好,但也不想就此荒芜,继续更新!希望对你有用。
看这篇文章的同学们应该对getevent,sendevent这两个命令比较熟吧,我就不罗嗦了,还不熟悉的同学可以自己查一下。
一、
Android
中
按键
为什么需要进
package robot;
public class KeyBoard {
public native void listenDelegate(String className , String callback);
C 语言部分 :
头文件keyboard.h 该头文件需要使用javah 命令生成,教程这里不作讲解。
/* DO NOT EDIT THIS FILE - it is machine generated *.
在
Android
中,
监听
物理
按键
的
事件
需要借助于 KeyEvent 类和 KeyListener 接口。可以在 Activity 中重写 onKeyDown() 和 onKeyUp()
方法
来
监听
按键
事件
。
下面是一个示例代码,可以
监听
音量键和返回键的按下
事件
:
```java
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
// 音量键上按下
事件
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
// 音量键下按下
事件
return true;
case KeyEvent.KEYCODE_BACK:
// 返回键按下
事件
return true;
return super.onKeyDown(keyCode, event);
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
// 音量键上松开
事件
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
// 音量键下松开
事件
return true;
case KeyEvent.KEYCODE_BACK:
// 返回键松开
事件
return true;
return super.onKeyUp(keyCode, event);
需要注意的是,
监听
物理
按键
的
事件
只有在屏幕亮着的时候才能正常工作。如果屏幕已经熄灭,你需要借助于 PowerManager 的 WakeLock 功能来保持屏幕常亮,才能继续
监听
物理
按键
的
事件
。
xiaozheng532345722:
SettingsProvider\res\values\defaults.xml 属性
jaix:
android DroidPlugin插件使用
Tisfy: