自己做rom,把home相关处理去掉,只在应用中是无法做到的。

解决方案 »

  1.   


    做一个应用和定制一个系统ROM肯定不是一个工作量 
      

  2.   

    在Activity 里面重新
    @Override
    public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); // TYPE_KEYGUARD_DIALOG
    super.onAttachedToWindow();
    }
      

  3.   

    屏蔽应用中的Home还是屏蔽系统的Home?
      

  4.   

    2.3可以屏闭系统HOME键,以前产品中我把做了,4.0里应该也可以,不过现在处理移植阶段还没做到哪一步
      

  5.   

    可以看看这个,Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键、Home键
      

  6.   

    @Override
    public void onAttachedToWindow() {
    super.onAttachedToWindow();
    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);

    }
      

  7.   

    Home键底层控制的,用java好像控制不了
      

  8.   

    拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗?散了吧。
      

  9.   

    @Override
    public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); // TYPE_KEYGUARD_DIALOG
    super.onAttachedToWindow();
    }
      

  10.   

    最近研究锁屏,按照常规的方法,常规方法如下
    Java代码  收藏代码    public void onAttachedToWindow()  
        {    
               this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);       
               super.onAttachedToWindow();    
        }    但是这个方法到了4.0的系统上就失效了,按home照样会返回桌面。apktool了几个锁屏的软件之后发现其实现方法,即用WindowManager的addview方法将view加到窗口上,加上的时候将view的layoutparamas的type设为LayoutParams.TYPE_SYSTEM_ERROR,这个值sdk的解释为 
    Java代码  收藏代码    public static final int TYPE_SYSTEM_ERROR   
        Since: API Level 1   
        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代码  收藏代码    public class LockLayer {  
            private Activity mActivty;  
            private WindowManager mWindowManager;  
            private View mLockView;  
            private LayoutParams mLockViewLayoutParams;  
              
            public LockLayer(Activity act) {  
                mActivty = act;  
                init();  
            }  
          
            private void init(){  
                mWindowManager = mActivty.getWindowManager();  
                mLockViewLayoutParams = new LayoutParams();  
                mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;  
                mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;  
                //实现关键  
                mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;  
                //apktool value,这个值具体是哪个变量还请网友帮忙  
                mLockViewLayoutParams.flags = 1280;  
            }  
            public void lock() {  
                if(mLockView!=null){  
                    mWindowManager.addView(mLockView, mLockViewLayoutParams);  
                }  
            }  
            public void unlock() {  
                if(mWindowManager!=null){  
                    mWindowManager.removeView(mLockView);  
                }  
            }  
            public void setLockView(View v){  
                mLockView = v;  
            }  
        }   使用方法如下
    Java代码  收藏代码    public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                View lock = View.inflate(this, R.layout.main, null);  
                LockLayer lockLayer = new LockLayer(this);  
                lockLayer.setLockView(lock);  
                lockLayer.lock();  
            }   ok,这时可以实现按home键不返回桌面的效果,其他的键需要用另外的代码实现,网上都有。这段代码只调用一次的时候没有问题,但是如果遇到多线程或者多次lock和hide就会有问题,修改如下,一是将LockLayer改为单例模式,二是在hide和lock的时候先判断状态。修改后代码如下
    Java代码  收藏代码    public class LockLayer {  
            private Activity mActivty;  
            private WindowManager mWindowManager;  
            private View mLockView;  
            private LayoutParams mLockViewLayoutParams;  
            private static LockLayer mLockLayer;  
            private boolean isLocked;  
              
            public static synchronized LockLayer getInstance(Activity act){  
                if(mLockLayer == null){  
                    mLockLayer = new LockLayer(act);  
                }  
                return mLockLayer;  
            }  
              
            private LockLayer(Activity act) {  
                mActivty = act;  
                init();  
            }  
          
            private void init(){  
                isLocked = false;  
                mWindowManager = mActivty.getWindowManager();  
                mLockViewLayoutParams = new LayoutParams();  
                mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;  
                mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;  
                //实现关键  
                mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;  
                //apktool value,这个值具体是哪个变量还请网友帮忙  
                mLockViewLayoutParams.flags = 1280;  
            }  
            public synchronized void lock() {  
                if(mLockView!=null&&!isLocked){  
                    mWindowManager.addView(mLockView, mLockViewLayoutParams);  
                }  
                isLocked = true;  
            }  
            public synchronized void unlock() {  
                if(mWindowManager!=null&&isLocked){  
                    mWindowManager.removeView(mLockView);  
                }  
                isLocked = false;  
            }  
            public synchronized void setLockView(View v){  
                mLockView = v;  
            }  
        }   还有个问题是mLockViewLayoutParams.flags = 1280;1280这个值具体是哪个变量还不知道,有知道的留个言。    LockScreen.zip (148.2 KB)
        下载次数: 0
      

  11.   

    LayoutParams.FLAG_FULLSCREEN + LayoutParams.FLAG_LAYOUT_IN_SCREEN = 1280;
      

  12.   

    4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。
      

  13.   

    public void onAttachedToWindow() {
    this.getWindow().setHomeKeyEnable(
    WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE);
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
            super.onAttachedToWindow();
    }4.0之后的版本,屏蔽Home键,需如此做
      

  14.   


    不靠谱,sdk中红色的方法setHomeKeyEnable和flag HOME_KEY_INTERCEPT_ENABLE都没有啊。
      

  15.   


    不靠谱,sdk中红色的方法setHomeKeyEnable和flag HOME_KEY_INTERCEPT_ENABLE都没有啊。
    这个应该是 FLAG_HOMEKEY_DISPATCHED  
    直接setAttributes传进去就可以了
      

  16.   

    4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。怎么做。求方法。不要做死狗
      

  17.   

    在onAttachedWindows()里写
    this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);之后在onKeyDown里写相应的逻辑。刚刚解决这个问题。
      

  18.   

    发现还是没有屏蔽啊,依旧按home退出去了。