收藏 分销(赏)

android 4.0 屏蔽home键实现.docx

上传人:xrp****65 文档编号:6663574 上传时间:2024-12-19 格式:DOCX 页数:5 大小:25.78KB 下载积分:10 金币
下载 相关 举报
android 4.0 屏蔽home键实现.docx_第1页
第1页 / 共5页
android 4.0 屏蔽home键实现.docx_第2页
第2页 / 共5页


点击查看更多>>
资源描述
android 4.0 屏蔽home键实现 分类: Android 2012-05-01 18:14 115人阅读 评论(0) 收藏 举报 最近研究锁屏,按照常规的方法,常规方法如下 Java代码   1. public void onAttachedToWindow()   2. {     3.        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);        4.        super.onAttachedToWindow();     5. }     但是这个方法到了4.0的系统上就失效了,按home照样会返回桌面。apktool了几个锁屏的软件之后发现其实现方法,即用WindowManager的addview方法将view加到窗口上,加上的时候将view的layoutparamas的type设为LayoutParams.TYPE_SYSTEM_ERROR,这个值sdk的解释为   Java代码   1. public static final int TYPE_SYSTEM_ERROR    2. Since: API Level 1    3. Window type: internal system error windows, appear on top of everything they can.     如果直接这样用会报错,还要在AndroidManifest.xml里面加上权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>,ok上完整代码,封装了一个类,其中Lock和hide方法实现锁屏和解锁。 Java代码   1. public class LockLayer {   2.     private Activity mActivty;   3.     private WindowManager mWindowManager;   4.     private View mLockView;   5.     private LayoutParams mLockViewLayoutParams;   6.        7.     public LockLayer(Activity act) {   8.         mActivty = act;   9.         init();   10.     }   11.    12.     private void init(){   13.         mWindowManager = mActivty.getWindowManager();   14.         mLockViewLayoutParams = new LayoutParams();   15.         mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;   16.         mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;   17.         //实现关键   18.         mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;   19.         //apktool value,这个值具体是哪个变量还请网友帮忙   20.         mLockViewLayoutParams.flags = 1280;   21.     }   22.     public void lock() {   23.         if(mLockView!=null){   24.             mWindowManager.addView(mLockView, mLockViewLayoutParams);   25.         }   26.     }   27.     public void unlock() {   28.         if(mWindowManager!=null){   29.             mWindowManager.removeView(mLockView);   30.         }   31.     }   32.     public void setLockView(View v){   33.         mLockView = v;   34.     }   35. }    使用方法如下 Java代码   1. public void onCreate(Bundle savedInstanceState) {   2.         super.onCreate(savedInstanceState);   3.         View lock = View.inflate(this, R.layout.main, null);   4.         LockLayer lockLayer = new LockLayer(this);   5.         lockLayer.setLockView(lock);   6.         lockLayer.lock();   7.     }     ok,这时可以实现按home键不返回桌面的效果,其他的键需要用另外的代码实现,网上都有。这段代码只调用一次的时候没有问题,但是如果遇到多线程或者多次lock和hide就会有问题,修改如下,一是将LockLayer改为单例模式,二是在hide和lock的时候先判断状态。修改后代码如下 Java代码   1. public class LockLayer {   2.     private Activity mActivty;   3.     private WindowManager mWindowManager;   4.     private View mLockView;   5.     private LayoutParams mLockViewLayoutParams;   6.     private static LockLayer mLockLayer;   7.     private boolean isLocked;   8.        9.     public static synchronized LockLayer getInstance(Activity act){   10.         if(mLockLayer == null){   11.             mLockLayer = new LockLayer(act);   12.         }   13.         return mLockLayer;   14.     }   15.        16.     private LockLayer(Activity act) {   17.         mActivty = act;   18.         init();   19.     }   20.    21.     private void init(){   22.         isLocked = false;   23.         mWindowManager = mActivty.getWindowManager();   24.         mLockViewLayoutParams = new LayoutParams();   25.         mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;   26.         mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;   27.         //实现关键   28.         mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;   29.         //apktool value,这个值具体是哪个变量还请网友帮忙   30.         mLockViewLayoutParams.flags = 1280;   31.     }   32.     public synchronized void lock() {   33.         if(mLockView!=null&&!isLocked){   34.             mWindowManager.addView(mLockView, mLockViewLayoutParams);   35.         }   36.         isLocked = true;   37.     }   38.     public synchronized void unlock() {   39.         if(mWindowManager!=null&&isLocked){   40.             mWindowManager.removeView(mLockView);   41.         }   42.         isLocked = false;   43.     }   44.     public synchronized void setLockView(View v){   45.         mLockView = v;   46.     }   47. }    还有个问题是mLockViewLayoutParams.flags = 1280;1280这个值具体是哪个变量还不知道,有知道的留个言。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服