您的位置:首页 > 运维架构 > Shell

关于屏蔽HOME键和全屏

2012-03-28 23:08 211 查看
  今天接到一个需求,要求在我之前写的应用里增加命令行带参数形式的启动方式,在命令行启动的时候要求屏蔽掉HOME键和回退键,并且去掉 titlebar  和 status bar (说白了就是全屏),本来认为很简单的一个需求,却发现纠结了很久,所以今天特意在此整理下。

  一 首先命令行启动  : 很简单 

 1. 在要启动的Activity 中的 onCreate方法中 得到Intent, 然后用一个全局的 boolean 标识是否为 参数启动  代码大致如下

  XXXActivity{

     private boolean mLanchOut;

     onCreate(){

        Intent intent= getIntent();

       mLaunchOut = intent.getExtraBoolean("launchOut",false);  // launchOut 为外部传进来参数的key值

    }

}

2  启动一个命令窗口 adb shell 进去之后  然后  am start  -n com.***.***/com.***.***.XXX -ez launchOut true (注:com.***.***  表示你应用程序的包名 ,   com.***.***.XXX 表示你要启动的那个Activity的那个类的完整类名); 

这样的话 以后的要依据做是否为参数启动做相应的操作就根据 mLaunchOut的值来判断

 

二 然后是屏蔽到back 键   也很简单 

  在Activity类中重写 onBackPress()方法

 @Override

 public void onBackPressed() {

   .....  // 在这里写当按下back 键的时候你要做的操作 

   }

 

三  屏蔽 HOME键   这个是普通的按键事件捕捉不到的

要重写onAttchedToWindow() 然后在里面设定 设置 window的 type 类型为 KEYGUARD;

@Override

public  void onAttachedToWindow(){

       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);

        super.onAttachedToWindow();



 

四 设置全屏  这个具体就不细说了 两种方法 一种是代码中设定 ,一种是 Manifest.xml文件中配置  baidu 一搜到处都是

 

这时候 关键问题来了 当设置了屏蔽Home按键的时候 ,就全屏不了了  status bar(状态栏)就一直是存在的了,各种设置的方法 排列组合了一遍,发现还是不行,问题一直是存在,去baidu上搜了一把,发现碰到这种问题的人还不在少数,大家的解决方法要么就是不做HOME键 屏蔽了 要么就是 开一个线程啊 每隔一段时间就监听一下什么的, 这样 效率自然就会降低了 ,纠结ing!

  最终经历了无数次失败了之后找到解决方法了:

  用一个Activity 做缓冲 在这个缓冲Activity 中设置全屏 然后从这个缓冲Activity  跳转到 到目的Activity  中 在目的Acitivity 中设定 屏蔽HOME键 即上面归纳的第三步

  比如说 我们的目的Activity  叫他为TargetActivity   缓冲 Activity 叫 LoadActivity

 LoadActivity.java    我们在这个Activity的manifest .xml中配置 Theme 为 noTitleBar.FullScreen

class LoadActivity{

       onCreate(){

             Intent intent = new Intent();

             intent.setClass(this,TargetActivity.class);

             startActivity();

             this.finish();

      }

}

 

TargetActivity.java

class TargetActivity{

   onCreate(){

      。。。//设置全屏

  }

@Override

public  void onAttachedToWindow(){

       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);

        super.onAttachedToWindow();



 

}

 这样 我们要启动 TargetActivity的时候 就启动LoadActivity 这时候 全屏和屏蔽HOME键就同时做到了

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell