屏蔽HOME键(4.0以下)

近日在研究一个视频锁的功能,即在 视频播放界面上设一个锁的功能,当该锁起效后,就会屏蔽back, home, menu三个键的功能。

back 和 menu 键都可以通过 app层  的 onKeyDown 和 onKeyUp 函数来拦截。但是 home 键不行。

于是上网查了一下在app层屏蔽 home 键的方法。

主流的方法如下所示。但只在2.2,2.3平台下有效。(下面列举的方法只在android 2.2, 2.3 上有效)

屏蔽Activity, Dialog风格Activity, AlertDialog的Home键功能方法分别是:

1.屏蔽Activity中的Home键功能,只需要在你要屏蔽的activity 中重写 onAttachToWindow() 这个函数就可以了


[java]
@Override   
public void onAttachedToWindow() {   
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);    
    super.onAttachedToWindow();   
}   
    @Override 
    public void onAttachedToWindow() { 
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  
        super.onAttachedToWindow(); 
    }  

 

2.屏蔽 Dialog风格Activity的Home键功能,也需要在你要屏蔽的activity 中重写 onAttachToWindow() 这个函数,但设置window 的值需要改变为 TYPE_KEYGUARD_DIALOG


[java]
@Override   
public void onAttachedToWindow() {   
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onAttachedToWindow();   
}   
    @Override 
    public void onAttachedToWindow() { 
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
        super.onAttachedToWindow(); 
    } 
 


这里之所以和Activity区分,是因为Dialog风格Activity如果用第一种方法,这个Dialog风格Activity的背景就变成黑色的,而不是透明的.

3.屏蔽AlertDialog的Home键功能


[java]
AlertDialog d = b.create(); 
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
    AlertDialog d = b.create();
    d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

来自:http://www.2cto.com/kf/201207/138886.html

你可能感兴趣的:(屏蔽HOME键(4.0以下))