安卓后台监听按键事件
2017-04-20 18:22
3591 查看
写这篇文章的原因是之前接到一个项目,要求是通过音量键来修改时间。这篇博客就是针对这个,源码链接在下面。
我们都知道要做监听的话首先需要去重写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;
@Override
protected 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);
}
@Override
public void onInterrupt() {
}
@Override
public void onCreate() {
Log.i(TAG, "RobMoney::onCreate");
super.onCreate();
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// TODO Auto-generated method stub
}
}5.再去配置文件里面注册一个广播或者动态注册,我这里的话是通过监听这个事件来发送一个广播,广播来处理事件 (直接给整个源码了,反正很简单)
百度云盘:http://pan.baidu.com/share/link?shareid=2641899309&uk=4097462172
小电影网站:www.233movie.xyz
相关文章推荐
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- Cocos2d-x 添加安卓按键监听事件
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 安卓开发最简单的按键监听事件
- 基于Java语言的安卓编程之十九按键事件监听(上)
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 基于Java语言的安卓编程之十九按键事件监听(下)
- 安卓(Android) 监听按键长按事件
- 探讨Android实现后台(Service)按键监听的功能
- cocos2dx3.13 lua注册、分发监听真机切到后台事件
- 安卓基于监听事件处理(一)
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 如何在service中获取按键监听事件呢
- 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)
- 安卓学习笔记---Fragment 里面加webview 监听onback事件(WebView的返回以及整个退出事件)
- 安卓 按键点击事件
- iOS如何拦截音量按键事件(前台+后台)
- 通过代码调整系统音量,监听音量实体按键事件
- 201507221403_《backbone之一——新建模型和集合、实例化模型、模型上监听事件的方法、模型设置和获取后台数据、配置理由方法、视图绑定事件的方法、绑定模型等》