4.0以上系统锁屏类应用禁用home键

来源:互联网 发布:开封王大昌茶庄淘宝 编辑:程序博客网 时间:2024/06/01 09:34

最近做了一款锁屏类应用,但是现在都是4.0以上系统,home键的禁用不能和返回键禁用那样处理,网上找了好多答案,大多数是让改sdk,但是那不是第三方应用能实现的,又去github上找了几个demo,最后找到了能实现类似功能的app,网址列在下面

https://github.com/tanhuopeng/classLock

他的大概思路是,把你锁屏的界面添加到WindowManager的顶层,代码如下

private WindowManager wm;private ViewGroup mViewContent;

在oncreate里面:

mViewContent = (ViewGroup) View.inflate(this, R.layout.main, null);wm = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);generateLayoutParams(wm, mViewContent,getResources().getDisplayMetrics().widthPixels, getResources().getDisplayMetrics().heightPixels);

generateLayoutParams方法如下


public static WindowManager.LayoutParams generateLayoutParams(WindowManager wm, ViewGroup viewgroup, int width, int height){   WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();   wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;   wmParams.format = PixelFormat.OPAQUE;   wmParams.flags = WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN         | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;   wmParams.width = width;   wmParams.height = height;   wm.addView(viewgroup, wmParams);   return wmParams;}

然后在layout:main里面又一个button

Button button = (Button)mViewContent.findViewById(R.id.button);
注意(button)后面是mViewContent,因为这个button是在mViewContent里面的,而这个activity的layout可以不是main,两个可以不同,切记。

然后设置button的点击方法,里面的内容很简单,只是把activity,finish掉就ok,然后重写onDestroy:

@Overrideprotected void onDestroy() {   super.onDestroy();   if (wm != null) {      wm.removeView(mViewContent);   }}
即,在该activity销毁的时候,移除我们加在WindowManager里的mViewContent,这样就实现了类似禁用home键的功能。

至于监听锁屏状态打开activity等功能,网上很多,在这里不赘述。

注意:国内小米手机,默认是关闭悬浮窗的,所以这种方法会失效,解决办法就是提醒用户打开该应用悬浮窗权限。

转载请注明出处


原创粉丝点击