最近做项目碰到一个需求,把那个Android 手机里面平板的虚拟 RecentApplication 键给隐藏掉,(我自己搞了好久,一直把他当成菜单键,看过源码的朋友就不要说了,O(∩_∩)O哈哈~)!

我在这里说下吧:

Android 4.0 桌面底部状态栏分为两个部分:左边是三个导航键:从左置右依次是:返回键 ,Home键和RecentApplication键,就是查看最近打开的所有程序,多任务切换就在这里。 这三个键为一个区域 叫NavigationArea,即导航区。 最右边是NotificationArea,也就是提示信息区,有电量,无线信号,蓝牙等信息显示。 这条StatusBar,是无论打开哪个程序都会显示在最下方的。

Home键与Recent键的点击事件是在framework层进行处理的,因此onKeyDown与dispatchKeyEvent都捕获不到点击事件。

查看StatusBarManager.java源码,目前只能通过其void disable(int what) {…}设置,并可传入值:

public static final int DISABLE_HOME = View.STATUS_BAR_DISABLE_HOME; //二进制的值是0x00200000

public static final int DISABLE_RECENT = View.STATUS_BAR_DISABLE_RECENT; //二进制的值是

0x01000000

public static final int DISABLE_BACK = View.STATUS_BAR_DISABLE_BACK; //二进制的值是 0x00400000

public static final int DISABLE_NONE = 0x00000000;

等等一些属性,具体的可以查看View的源码,因为都是@hide 的,Android中有许多隐藏的Service,StatusBarManager就是其中一个,在Context.java中可以看到:

**

/** * Use with {@link #getSystemService} to retrieve a {@link * android.app.StatusBarManager} for interacting with the status bar. * *@see #getSystemService *@see android.app.StatusBarManager *@hide */

public static final String STATUS_BAR_SERVICE = "statusbar";**

表明该service不对外提供,如果要调用的话需要在源码树上编译,才能调用到标记为@hide的接口。也可以将源码编译出来的classes.jar包添加到工程里面。(这种方式我嫌麻烦)然后去网上找了下,可以利用反射来进行调用;

代码如下:

public static final String STATUS_BAR_SERVICE = "statusbar";

public static final String CLASS_STATUS_BAR_MANAGER = "android.app.StatusBarManager";

public static final String METHOD_DISABLE = "disable";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

try {

Object service = getSystemService(STATUS_BAR_SERVICE);

Class> statusBarManager = Class.forName(CLASS_STATUS_BAR_MANAGER);

Method disable = statusBarManager.getMethod(METHOD_DISABLE,

int.class);

// disable.invoke(service, 0x00200000); // 为View.STATUS_BAR_DISABLE_HOME 的值

// disable.invoke(service, 0x00400000); // 为View.STATUS_BAR_DISABLE_BACK 的值

disable.invoke(service, 0x01000000); // 为View.STATUS_BAR_DISABLE_RECENT的值

} catch (Exception e) {

e.printStackTrace();

}

}

上面的“返回键”和“home”键我也这样加了进去,但效果不理想,只执行最后一条(谁放在后面最后执行谁),我后来把他们分开 也不行。但是需求没。

StatusBarManager提供了一些有用的接口,像disable()方法正是我们需要的,一些系统级的应用也是调用的该方法禁止StatusBar下拉的,比如电话、锁屏模块。想要调用该方法,你还需要以下权限:

会报出以下错误提示:

Neither user 10076 nor current process has android.permission.STATUS_BAR.

提示缺少权限,Manifest添加之,提示:Permission is only granted to system apps

总结:通过这种方法屏蔽状态栏下拉,必须得有系统签名,WTF。。。

java屏蔽虚拟按键代码_Android虚拟按键 Recent键屏蔽(隐藏)相关推荐

  1. java屏蔽虚拟按键代码_Android 中隐藏虚拟按键的方法实例代码

    下面通过一段代码给大家讲解android 隐藏虚拟按键的方法,废话不多说了,大家多多看看代码和注释吧,具体代码如下所示: /** * 隐藏虚拟按键,并且全屏 */ protected void hid ...

  2. ADB 按键名、按键代码数字、按键说明对照表

    文章目录 按 对照表 按 keyevent事件有一张对应的表,可以直接发送对应的按键代码数字,也可以使用对应的按键名,例如模拟按下Back键有如下两种用法: echo 方法一: adb shell i ...

  3. java实现钢琴颜色改变_Android 拨号盘按键音修改为钢琴音效果实现

    1. 准备好对应的音源文件. 这里以ogg格式的音频文件为例.从数字0-9,* # 总共需要12个ogg音源文件.放在raw文件夹下备用. 2. 修改代码逻辑,主要在Dialer模块的DialpadF ...

  4. java mqc系统开源代码_android PDF阅读器(开源) 暴强哦

    [实例简介] 看这个下载分数就知道了 源代码我已经运行过,能用,且运行很好.) [实例截图] [核心代码] a2d1802f-1d67-4dd9-a2f5-8b9297dd4b79 └── pdfDr ...

  5. html中如何屏蔽一段代码,html中如何使用python屏蔽一些基本功能(示例代码)

    进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有"合适的"工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这 ...

  6. android 覆盖虚拟按键,解决Android 虚拟按键遮住了页面内容的问题

    在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...

  7. 隐藏与显示华为等有虚拟按键手机的虚拟按键

    关于手机虚拟按键的坑 首先吐槽一下虚拟按键,这个真的是没有卵用,个人觉得体验效果也差,不知道为什么华为会坚持使用.最近公司项目需用用到视频监控,在做视频播放全屏切换时,华为等有虚拟按键的手机,卡得我欲 ...

  8. 我的世界java手机版怎么调按键_《我的世界》按键设置 pc版快捷按键代码大全...

    导 读 今天小编给大家带来我的世界按键大全,在电脑上玩我的世界的宝宝们是否对快捷键熟悉呢?赶紧和小编一起去看看今天的pc版快捷按键代码操作指南吧~ 我的世界按键大全: 你点"Esc" ...

  9. 台式电脑键盘按键错乱_电脑键盘按键怕误触怎么办?用这款软件帮你屏蔽指定键盘按键!支持替换按键!...

    点击蓝字即可快速关注我,分享好软件~ 平时在一些情况下,比如在打游戏的时候,如果不小心按到了win键,就会被跳回桌面,非常的麻烦 今天小林君就来分享一个非常好用的小工具,通过它可以实现屏蔽电脑键盘上任 ...

最新文章

  1. 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
  2. 【独家】深度学习论文阅读路线图
  3. jquery之empty()与remove([expr])区别
  4. 假笨说-从一起GC血案谈到反射原理
  5. Go的strconv一
  6. JavaFX 2 GameTutorial第3部分
  7. linux python安装教程_Linux系统如何安装Python?新手教程
  8. 特斯拉拦不住蔚来取代BBA的心
  9. VS2008 sp1中文版下载地址
  10. 单片机简单的计算器c语言程序,AT89S52单片机实现简易计算器(C语言程序)
  11. Introductory Combinatorics 5th Solutions Chapter1 summary
  12. 如何在Pidgin中为您的域帐户设置Google Talk
  13. java duration 时间差_Java Duration toDays()用法及代码示例
  14. 英特尔酷睿处理器后面的数字和字母含义
  15. 【RuoYi-Vue-Plus】问题笔记 06 - p6spy 日志打印 SQL 时间格式化问题
  16. 常用颜色的十六进制和rgb格式
  17. 十六种顶级的思维模型
  18. 朕 JAVAEE 实验02 实验报告
  19. voip 软电话 csipsimple
  20. Mac下完美利用雷蛇鼠标的多个功能按键(解决雷蛇Win键组合键无法映射问题)

热门文章

  1. 体系结构 记分牌实例
  2. 处理python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trun
  3. 【黑金视频连载】NIOS II视频教程(01)--软件安装
  4. 三菱数据移位指令_三菱FX系列PLC循环与移位类指令的使用方法
  5. idea 修改项目名称的方法
  6. python 输出列表中元素的位置_python如何读取列表中元素的位置?
  7. initialization of _pywrap_tensorflow raised unreported exception 解决方法
  8. 输出乱码疑难杂症总结及解决方案
  9. IE代理服务器没有响应 浏览器无法打开网页解决方法(浏览器无法打开网页但是可以使用其他软件)
  10. 1块钱30分钟利用华为云服务器配置一台云电脑并搭建一个简易网站(步步截图较详细)