我们都知道要做监听的话首先需要去重写Activity的OnkeyDown方法,然而这种办法只有当Activity在前台的时候才能用!在后台的话就不行了。
可以用的方法
利用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
以前还不会github。让大家见笑了2018.5.7