安卓后台监听按键事件
来源:互联网 发布:蜡笔小新 画风 知乎 编辑:程序博客网 时间:2024/06/04 18:35
写这篇文章的原因是之前接到一个项目,要求是通过音量键来修改时间。这篇博客就是针对这个,源码链接在下面。
我们都知道要做监听的话首先需要去重写Activity的OnkeyDown方法,然而这种办法只有当Activity在前台的时候才能用!在后台的话就不行了,这个项目我试过4种方法,1种可用!
1.用Service来绑定需要监听按键的Activity
2.自己注册一个广播来监听音量的变化(这个可以用,但是不太准确,比如音量最大了怎么办,最小了怎么办)
3.利用多线程(但是由于技术原因和各种原因还是失败,中间问过挺多人,他们也做过但都放弃了这个项目)
可以用的方法
你可以利用AccessibilityService(安卓的无障碍辅助功能)
步骤.
1.你需要现在配置文件里面去配置他
<application> <service android:name="你的无障碍辅助类名" android:label="@string/accessibility_service_label"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> </service> <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /> </application>
2.这个 meta-data元素指的是在应用程序的资源目录创建的一个XML文件。(/res/xml/accessibility_service_config.xml). 下面的代码显示了服务配置文件的示例内容:<?xml version="1.0" encoding="utf-8"?><accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFlags="flagRequestFilterKeyEvents" android:canRetrieveWindowContent="true" android:canRequestFilterKeyEvents="true" android:description="@string/accessibility_description" android:notificationTimeout="100"/>
3.自己新建一个类去继承他并重写他的3个方法 假设你要监听按键的话就重写OnKeyEvent方法
public class RobMoney extends AccessibilityService { private static final String TAG = "dxj";private Calendar c = Calendar.getInstance();int flag=0;@Overrideprotected boolean onKeyEvent(KeyEvent event) {Log.i(TAG, "onKeyEvent");int key = event.getKeyCode();switch(key){case KeyEvent.KEYCODE_VOLUME_DOWN:Intent downintent = new Intent("com.exmaple.broadcaster.KEYDOWN");downintent.putExtra("dtime", System.currentTimeMillis());if(flag==0){sendBroadcast(downintent);flag+=1;}else if (flag==1) {flag=0;}Log.i(TAG, "KEYCODE_VOLUME_DOWN");break;case KeyEvent.KEYCODE_VOLUME_UP:Intent upintent = new Intent("com.exmaple.broadcaster.KEYUP");upintent.putExtra("utime", System.currentTimeMillis());if(flag==0){sendBroadcast(upintent);flag+=1;}else if (flag==1) {flag=0;}Log.i(TAG, "KEYCODE_VOLUME_UP");break;default:break;}return super.onKeyEvent(event);}@Overridepublic void onInterrupt() {}@Overridepublic void onCreate() {Log.i(TAG, "RobMoney::onCreate");super.onCreate();}@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {// TODO Auto-generated method stub}}
5.再去配置文件里面注册一个广播或者动态注册,我这里的话是通过监听这个事件来发送一个广播,广播来处理事件 (直接给整个源码了,反正很简单) 百度云盘:http://pan.baidu.com/share/link?shareid=2641899309&uk=4097462172
小电影网站:www.233movie.xyz
2 0
- 安卓后台监听按键事件
- Cocos2d-x 添加安卓按键监听事件
- 安卓开发最简单的按键监听事件
- 安卓 按键点击事件
- 安卓监听软键盘按键
- 安卓多种监听事件
- 多按键监听事件
- 监听鼠标按键事件
- android按键监听事件
- 安卓按键事件分发处理机制
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- activity继承Cocos2dxActivity后无法监听安卓返回按键
- SWT/JFace 按键、事件、监听
- SWT/JFace 按键、事件、监听
- SWT/JFace 按键、事件、监听
- 耳机按键事件的监听
- Eclipse跳不到断点处:出现Source not found
- JS设计模式开篇
- uva 1605 Building for UN
- sql语句优化的13中方法
- Unity总结七
- 安卓后台监听按键事件
- postman传入含时间类型的对象
- 微信开发
- 芭学园华龙苑的彩虹班值得上吗?
- Struts-OGNL-1
- Linux下使用system()函数一定要谨慎
- 获取指定时间戳的 周一 与 周日
- 千兆以太网TCP协议的FPGA实现。
- 五分钟轻松搞定产品需求文档!这可能史上最全PRD文档模板