安卓后台监听按键事件

我们都知道要做监听的话首先需要去重写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
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值