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键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...
随机推荐
- Unity手游汉化笔记②:使用UABE替换TTF字体
总的笔记:https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一.分析 二.思路 三.具体实践 四.总结 Unity版本:2018.4.5f1 工具 ...
- Java 7 NIO.2学习(Ing)
Path类 1.Path的基本用法 Path代表文件系统中的位置,即文件的逻辑路径,并不代表物理路径,程序运行的时候JVM会把Path(逻辑路径)对应到运行时的物理位置上. package com.j ...
- DTC测试
DTC配置好后要在2台server之间测试下是否能使用. 1.在A台上建立ODBC的连接B. 控制面板→管理工具→ODBC Datat Source(32bit) 点击添加 选择SQL SERVER ...
- Go编程基础(介绍和安装)
Michaelhbjian 2018.10.07 19:41 字数 892 阅读 317评论 0喜欢 0 Go(又称Golang[3])是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回 ...
- 《团队名称》第八次团队作业:Alpha冲刺day3
项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...
- 基于TCP和UDP的Socket通信
TCP的Socket通信 TCP是面向连接的,安全的协议,它是一对一的关系 server client 上面只是单个客户端同服务器通信,可使用多线程编程实现多个客户端的通信 UDP的Socket通信 ...
- rxswift的双向绑定
将值域与控件域一同提升为rx的monand域,然后进行绑定. 类型提升. 在之前的文章样例中,所有的绑定都是单向的.但有时候我们需要实现双向绑定.比如将控件的某个属性值与 ViewModel里的某个 ...
- DSL的本质:领域构建的半成品
DSL的本质是使用通用和专用语言构建领域的半成品: 实际上是构建了一个世界观.小宇宙的半成品: 这个半成品包含领域的基本要素.联系方式和基本运行规律: 开发者使用这个半成品平台进行开发能达到事半功倍. ...
- 1.创建SpringMVC项目
1.搭建环境 在Configure下点击Settings 找到Maven修改配置目的是使用自己配置的Maven以及阿里云镜像 开始创建项目 写入自己的公司名,项目名点击下一步 添加信息加快maven配 ...
- 高考数学答卷策略[K12论坛转载]
一.试卷上给你的启发 1.试卷上有参考公式,80%是有用的,它为你的解题指引了方向: 2.解答题的各小问之间有一种阶梯关系,通常后面的问要使用前问的结论.如果前问是证明,即使不会证明结论,该结论在后问 ...