Android如何屏蔽home键和recent键
最近在做一个项目的时候,进入一个 Activity后需要暂时屏蔽掉home键和recent键(back键可以在onKeyDown里面处理),网上找了半天,都是针对旧版本android的方法,android5.0以后就不能生效了。
看了半天的SDK和资料,发现有一种方法可以暂时屏蔽掉home键和recent键,如果有办法获取到高级的系统权限,还可以正在的屏蔽掉。废话不多说,直接上代码:
其实代码就一句话:startLockTask,整段代码如下:
package utils.bobo.com.boboutils.App;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import utils.bobo.com.boboutils.R;
public class ScreenPinningActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_pinning);
}
@Override
public void onResume(){
super.onResume();
this.startLockTask();
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK)
return true;
return super.onKeyDown(keyCode, event);
}
}
启动后,会出现如下图的提示,用户点击知道了,home键和recent键就被屏蔽掉了,只有长按back键才能解除这个状态:
再来说说高级的接口,这个高级的接口需要android.permission.STATUS_BAR的permission,这个permission定义如下:
<permission android:name="android.permission.STATUS_BAR"
android:protectionLevel="signature|privileged" />
这个定义决定了你的apk必须是platform签名或者预制在system/priv-app下,
所以这个方法对普通的开发者无效,但是如果你是做rom的,就可以采用这个方法。代码也很简单,这边就不贴完整代码了
mStatusBarManager = (StatusBarManager) getApplicationContext()
.getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.disable(StatusBarManager.DISABLE_HOME | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_EXPAND);
在activity 退出的时候要执行下
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
恢复home键和recent键
其实还有一种比较流氓的方法:
就是不用activity实现,而是添加一个TYPE_SYSTEM_ALERT的view到window上,这个网上的代码也挺多的,这边贴小部分代码,有兴趣的同学自己再去百度下
WindowManager wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.FILL_PARENT;
params.height = WindowManager.LayoutParams.FILL_PARENT;
params.format = PixelFormat.TRANSPARENT;
params.gravity=Gravity.LEFT|Gravity.TOP;
params.x = 0;
params.y = 0;
wm.addView(mView, params);
源代码可以从 https://github.com/bobohuang1985/android-utils-api 下载,
————————————————
版权声明:本文为CSDN博主「zhenbohuang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhenbohuang/article/details/72722247
Android如何屏蔽home键和recent键的更多相关文章
- android处理Back键Home键和Menu键事件(转)
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BAC ...
- Android 监听返回键、HOME键
拦截返回键,HOME键,继承BaseActivity即可 import android.app.Activity; import android.content.BroadcastReceiver; ...
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
Atitit.android js 的键盘按键检测Back键Home键和Menu键事件 1. onKeyDown @Override public boolean onKeyDown(int keyC ...
- android Home键和返回键
在Android中,当按下Home键,默认情况下stop前台的actiity,即activity设置成onstop,而不是ondestory.如果再次启动该activity不是调用onCreate,而 ...
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...
- Android Back键和Home键的区别
back键 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来,销毁当前Activity.当此Activit ...
- android 实现返回键执行home键方法
在公司的产品开发,中老板很是执着于,不要看到启动界面,但是又不想去掉启动界面. so 实现返回键执行home键方法. public boolean onKeyDown(int keyCode, Key ...
- Android 键盘键名和键值列表
电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK ...
- 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...
随机推荐
- 在页面获取本地电脑IP
<%@ page language="java" import="java.util.*" contentType="text/html; ch ...
- pythonic-迭代器函数-itertools
认识 Python 的itertools模块提供了很多节省内存的高效迭代器, 尤其解决了一些关于数据量太大而导致内存溢出(outofmemory)的场景. 我们平时用的循环绝大多数是这样的. # wh ...
- Java开发环境之Tomcat
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 壹章:Tomcat安装教程 1)去官网下载安装包 http://tomcat.apache.org/ 建议下载压缩包(zi ...
- Prometheus学习笔记(1)Prometheus架构简介
Prometheus简介和架构 Prometheus 是由 SoundCloud 开源监控告警解决方案.架构图如下: 如上图,Prometheus主要由以下部分组成: Prometheus Serve ...
- 【Mysql】数据库为啥会出现_encrypt和_warning成对的表
这是因为MySQL数据库的勒索病毒 可能是你数据库的密码太简单或者没有设置密码导致数据库被攻击 详情请参考: https://www.secpulse.com/archives/112351.html
- Centos7下的日志切割--转发
logrotate /etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root ...
- 业精于勤荒于嬉---Go的GORM查询
查询 //通过主键查询第一条记录 db.First(&user) //// SELECT * FROM users ORDER BY id LIMIT 1; // 随机取一条记录 db.Tak ...
- 利用Metasploit攻击Android
首先我在Kali下生成一个Android的应用程序,即apk格式的文件,用到的命令是: msfvenom -p android/meterpreter/reverse_tcp LHOST=本地ip L ...
- version GLIBCXX3.4.21 not defined in file libstdc++.so.6 with link time reference
问题:在运行C++程序时,输入 ./a.out 输出:symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version ...
- centos安全加固
设置SSH登录超时时间 /etc/profile export TMOUT=900 设置账户密码策略 /etc/login.defs PASS_MAX_DAYS 180 PASS_MIN_DAYS 0 ...