Android中捕获HOME键

项目需要在Androi 应用中捕获HOME键,找了一下网上的资料,找到解决方法如下:

在Android应用中重载onAttachedToWindow方法:

	public void onAttachedToWindow() {
		if(catchHomeKey)
		{
			Log.d(TAG, "onAttachedToWindow");
			 String v = SystemProperties.get("ipanel_home").trim();
			 
			this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
		}
		super.onAttachedToWindow();
	}

onAttachedToWindow是在第一次onDraw前调用的。也就是我们写的View在没有绘制出来时调用的,但只会调用一次。

这里将Windows的Type设置为TYPE_KEYGUARD

我们再看下系统Home键的处理流程,具体参照:

http://blog.csdn.net/wdaming1986/article/details/7539600

主要是PhoneWindowManager.java,中间有一个函数:interceptKeyBeforeDispatching

            WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
            if (attrs != null) {
                final int type = attrs.type;
//				final int ipanel_home = attrs.ipanel_home;
				
                if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
                    // the "app" is keyguard, so give it the key
                    return false;
                }

这里获取window type,如果为type_keyguard,则返回false,表示应用需要捕获,这样在应用中OnKeyDown函数中就能够监听到按键了。

另外如果不捕获Home键,但是招安Home键没有回到Android的Home,需要看下Settings.Secure.DEVICE_PROVISIONED这个值是否有问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值