Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2195291
  • 博文数量: 866
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10638
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/landuochong

文章分类

全部博文(866)

文章存档

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(70)

2011年(103)

2010年(360)

2009年(283)

2008年(22)

分类: 嵌入式

2012-09-12 17:33:42

2.* 版本:
  主要就是重写 onAttachedToWindow () 和 onKeyDown (...,...) 这两个方法。
 

前者是起到拦截作用的,后者是监听到HOME按键事件后的动作,如果没动作可以不要 onKeyDown。

还要注意,要加权限:

android.permission.DISABLE_KEYGUARD ">

 

  // 转载请注明出处: http://aking86.iteye.com/admin/blogs/1317186

     虽然网上有很多,但介绍的都不是很详细,也不算深入,我在这里研究了下,并把日志给捞了出来。

     里面包括 HOME拦截, BACK拦截,打捞日志。

    @Override
    public void onAttachedToWindow () {
        System.out.println("Page01 -->onAttachedToWindow");
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }

    @Override
    public boolean onKeyDown (int keyCode, KeyEvent event) {
        System.out.println("Page01 -->onKeyDown: keyCode: " + keyCode);
        if (KeyEvent.KEYCODE_HOME == keyCode) {
            System.out.println("HOME has been pressed yet ...");
            // android.os.Process.killProcess(android.os.Process.myPid());
            Toast.makeText(getApplicationContext(), "按了HOME 键...",
                    Toast.LENGTH_LONG).show();
        } else if (KeyEvent.KEYCODE_BACK == keyCode) {
            System.out.println("BACK has been pressed yet ..."); //按了返回
        }
        return super.onKeyDown(keyCode, event); // 不会回到 home 页面
    }


通过打印日志,还得出一个结论:

onAttachedToWindow() 方法只会执行一次,也就是在第一次 onResume() 之后,以后就不再执行了。


4.*版本:

在AndroidManifest.xml里面加上权限

  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这个值具体是哪个变量还不知道,有知道的留个言



阅读(997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册