不行啊,屏蔽home要重写public void onAttachedToWindow()  
{    
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);       
       super.onAttachedToWindow();    
}  ,但this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);       这句会使之前的设置全屏的代码失效网上搜了一下,很多遇到这个问题,都没有一个解决的办法,但很多锁屏软件都实现了这样的功能,我觉得肯定是有办法的

解决方案 »

  1.   

    如果不动framework层重新编译系统,那么只有重写public void onAttachedToWindow() 这个办法了
      

  2.   

    public boolean onKeyDown(int keyCode, KeyEvent event) {
         if(keyCode==KeyEvent.KEYCODE_HOME){
         return true;
         }
         return super.onKeyDown(keyCode, event);
        }这样试试可以吗
      

  3.   

    屏蔽home和全屏没有关系啊  全屏到xml里设置theme
    屏蔽home找了一点 看能帮你么public void onAttachedToWindow() {
                    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
                    super.onAttachedToWindow();
            }我记得以前做过  普通的方法不能屏蔽home的  
    或者你可以参考这个方法http://www.eoeandroid.com/forum.php?mod=viewthread&tid=65626
      

  4.   

    谢谢你的回复,辛苦了,这个和我之前找的方法差不多屏蔽home和全屏是有冲突的,是this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);导致之前设置全屏的一句代码失效了。
      

  5.   

    我知道的全屏有两个方法:代码中:
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);xml中:
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"都试了一下,如果重写
    public void onAttachedToWindow() {
      this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
      super.onAttachedToWindow();
      }就不能全屏了
      

  6.   

    实现onKeyDown就好了,
    我就是在全屏下这样做了,
    唯一不同的是,我在按下HOME键是提示输入密码 再返回。
      

  7.   

    显示一个window type为alert的透明dialog, HOME key就不起作用了
      

  8.   

    谢谢你回复,只是我是这样重写的
    public boolean onKeyDown(int keyCode,KeyEvent event){ switch(keyCode){
    case KeyEvent.KEYCODE_HOME:return true;
    case KeyEvent.KEYCODE_BACK:return true;
    case KeyEvent.KEYCODE_MENU:return true;
    case KeyEvent.KEYCODE_CALL:return true;
    case KeyEvent.KEYCODE_SYM: return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN: return true;
    case KeyEvent.KEYCODE_VOLUME_UP: return true;
    case KeyEvent.KEYCODE_STAR: return true;
    } return super.onKeyDown(keyCode, event); }
    似乎对home键不起作用,不知道能不能贴出你的代码给我看一下,我对比一下。
      

  9.   

    谢谢你的回复,根据你的提示,我找到段代码:
    AlertDialog d = b.create();
    d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    你说的是这样么?我把这段尝试地放到我的代码里,如果不调用AlertDialog.show()这个代码就没什么效果,但一调用AlertDialog.show()就崩溃能不能贴段示例代码?
      

  10.   

    确保在AndroidManifest.xml里面添加以下权限:
        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
        <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
      

  11.   

    非常感谢你的帮助,用你给的方法,的确实现了屏蔽home键,但随之带来了一个问题,就是屏幕(我的锁屏activity)也无法响应触摸事件了,我希望用户通过点击屏幕上的按钮来解锁,所以,我根据你的提示,对你的方法进行了略微的修改,实现了全屏时屏蔽除关机键外的所有键并能响应键盘。分享一下我的方法:
    =================================================================
    声明权限:
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />在activity类中声明函数和成员: Runnable mDisableHomeKeyRunnable = new Runnable() {

    @Override
    public void run() {
    disableHomeKey();

    }
    };

    Handler mHandler = new Handler(); public  void  disableHomeKey()
    {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    }在onCreate中调用:
    mHandler.postDelayed(mDisableHomeKeyRunnable,200);
    ==============================================================
    方法完毕。我也试过调用mHandler.post(mDisableHomeKeyRunnable);但这样就activity就不是全屏了至此问题解决,谢谢各位的帮助!!!
      

  12.   

    楼主你这个方法每200毫秒像UI线程发送Runnable,这样会不会效率低下,影响性能呢
      

  13.   

    这貌似不是每两百毫秒吧,而是延迟两百毫秒提交Runnable吧难道我一直搞错了?
      

  14.   

    果然好用,supes !感谢大家的分享,精华帖。
      

  15.   

    楼主可否能告知屏(贴上也行)蔽home键的详细代码,小弟最近也卡在这个问题上。
      

  16.   

    试用无效,前一个activity有状态栏,锁屏启动还是有状态栏
      

  17.   

    这个问题我已经搞定了,可以屏蔽android4.0的home键
      

  18.   

    你好 我屏蔽了home键 但是不能全屏 同时surfaceview 也无法显示了 能否指导一二
    QQ 249480300
      

  19.   

    非常感谢你的帮助,用你给的方法,的确实现了屏蔽home键,但随之带来了一个问题,就是屏幕(我的锁屏activity)也无法响应触摸事件了,我希望用户通过点击屏幕上的按钮来解锁,所以,我根据你的提示,对你的方法进行了略微的修改,实现了全屏时屏蔽除关机键外的所有键并能响应键盘。分享一下我的方法:
    =================================================================
    声明权限:
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />在activity类中声明函数和成员: Runnable mDisableHomeKeyRunnable = new Runnable() {

    @Override
    public void run() {
    disableHomeKey();

    }
    };

    Handler mHandler = new Handler(); public  void  disableHomeKey()
    {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    }在onCreate中调用:
    mHandler.postDelayed(mDisableHomeKeyRunnable,200);
    ==============================================================
    方法完毕。我也试过调用mHandler.post(mDisableHomeKeyRunnable);但这样就activity就不是全屏了至此问题解决,谢谢各位的帮助!!!
    为什么我把这个方法集成到项目中会报错呢, java.lang.IllegalArgumentException: Window type can not be changed after the window is added.网上说这个方法也是使用在4.0以前的。所以求解4.0+的应该怎么做呢???