大熊的Android开发之旅

FBI Warning:欢迎转载,但请标明出处:,未经本人同意请勿用于商业用途,感谢支持!

(1)屏蔽返回键:重写onBackPressed()即可,不调用超类方法

@Overridepublic void onBackPressed() {// super.onBackPressed();}

(2)屏蔽Home键:

@Overridepublic void onAttachedToWindow(){this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);super.onAttachedToWindow();}

并加入权限:

<uses-permission android:name=”android.permission.DISABLE_KEYGUARD”></uses-permission>

4.4以上会失效)

用WindowManager的addview方法将view加到窗口上,加上的时候将view的layoutparamas的type设为LayoutParams.TYPE_SYSTEM_ERROR。

并加上权限<uses-permissionandroid:name=”android.permission.SYSTEM_ALERT_WINDOW”/>

参考代码:

private void forbiddenHomeKey(){mWindowManager = this.getWindowManager();mWindowManagerParams = new LayoutParams();mWindowManagerParams.width = LayoutParams.WRAP_CONTENT;mWindowManagerParams.height = LayoutParams.WRAP_CONTENT; // internal system error windows, appear on top of everything they canmWindowManagerParams.type = LayoutParams.TYPE_SYSTEM_ERROR; // indicate this view don’t respond the touch eventmWindowManagerParams.flags = LayoutParams.FLAG_NOT_TOUCHABLE;// add an empty view on the top of the windowmEmptyView = new View(this);mWindowManager.addView(mEmptyView, mWindowManagerParams);}

为什么设置了这个type后就可以屏蔽Home呢?我们可以看看PhoneWindowManager.java的interceptKeyBeforeDispatching()方法:

final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;for (int i=0; i<typeCount; i++) {if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {// don't do anything, but also don't pass it to the appreturn -1;}}WINDOW_TYPES_WHERE_HOME_DOESNT_WORK常量的值为:private static final int[] WINDOW_TYPES_WHERE_HOME_DOESNT_WORK = {WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,};所以type设置为上面两个之一就可以了!

3、关于Home的屏蔽,还有一种思路:

监听程序是否在前台显示(通过ActivityManager.getRunningAppProcesses()),如果没有,则马上把程序的task移动至前台(通过ActivityManager.moveTaskToFront())。但是Android早就已经想到这个漏洞,当你点击完home键后,系统的Launcher会有5秒的延迟保护。所有启动Activity、或者移动到前台的方法都会有5秒延迟。具体看stackoverflow上的解答,若需要破解此限制需要加入系统权限"android.permission.STOP_APP_SWITCHES":

也就是说,若没有系统权限的话,,只能通过自己写第三方的Launcher即可破解,此方法经过撸主本人亲测有效!

莫找借口失败,只找理由成功。

大熊的Android开发之旅

相关文章:

你感兴趣的文章:

标签云: