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

最近做了一款锁屏类应用,但是现在都是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:

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

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

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

转载请注明出处


你可能感兴趣的:(Android,锁屏,禁用,home键)