最近做一个项目要需要软件,不能随便被用户关掉,所以就一直研究如实现这种效果。主要实现的功能是,关掉虚拟按钮,关掉返回键,Home,menu键,电源键,下拉顶部栏。主要就是这几个。
返回键:返回键和音量键最简单,只要在Activity中重写onkeydown方法就好了。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_BACK://返回键
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN://音量键
return true;
case KeyEvent.KEYCODE_VOLUME_UP://音量键
return true;
}
//只要不返回super.onKeyDown()方法就能屏蔽掉按键了
return super.onKeyDown(keyCode, event);
}
home:比较麻烦,因为这个是没有办法真正屏蔽的,只能使用修改源码的方式,用点笨方法可以达到这种效果,就是将Activity 的action设置成luncher,把这个软件变成一个桌面,然后再点击home时选择这个软件,并将Activity的启动方式设置成sington,这样每次点击home时就启动这个软件,怎么也‘’退不出‘’了。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
电源键:电源键我的办法是做一个service,在后台跑,并注册一个监听电源启动,和关闭的广播,监听到这个事件时就启动哪个Activity,说白了就是将软件变成一个锁屏。
顶部栏:具体实现方式是,把Activity 的type变成一个dailog,并且总是控制在最顶端,这样就覆盖了顶部栏,下拉事件就不会被监听到了,也不会有下拉事件了