禁用应用中Android系统的导航栏(特别是平板)
由于公司项目是在全屏下的,所有界面都是全屏,唯有弹出提示框的时候,会出现系统的导航栏,由于是平板,导航栏信息比较多,该项目属于永不让用户进入原系统的项目。所以有导航栏,就让用户有了机会进入后台。
本今天在网上找了很多资料,试了很多方法,终于可以把导航栏的图表隐藏掉,点击事件也禁用了。唯有不足之处就是下面还有一个黑条,不管了,讲究用了。
public class StatusUtils {
//disable为是否禁用导航栏true为禁用
public static void statusBarDisable(boolean disable,Context mContext) { try { int DISABLE_NAVIGATION = StatusBarManager.DISABLE_EXPAND| StatusBarManager.DISABLE_BACK| StatusBarManager.DISABLE_NOTIFICATION_ICONS| StatusBarManager.DISABLE_NOTIFICATION_ALERTS| StatusBarManager.DISABLE_NOTIFICATION_TICKER| StatusBarManager.DISABLE_SYSTEM_INFO| StatusBarManager.DISABLE_NAVIGATION| StatusBarManager.DISABLE_CLOCK;int DISABLE_NONE = 0x00000000; //获得ServiceManager类 Class<?> ServiceManager = Class .forName("android.os.ServiceManager"); //获得ServiceManager的getService方法 Method getService = ServiceManager.getMethod("getService", java.lang.String.class); //调用getService获取RemoteService Object oRemoteService = getService.invoke(null,"statusbar"); //获得IStatusBarService.Stub类 Class<?> cStub = Class .forName("com.android.internal.statusbar.IStatusBarService$Stub"); //获得asInterface方法 Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class); //调用asInterface方法获取IStatusBarService对象 Object oIStatusBarService = asInterface.invoke(null, oRemoteService); //获得disable()方法 Method disableMethod = oIStatusBarService.getClass().getMethod("disable",int.class,IBinder.class,String.class); //调用disable()方法 if(disable){ disableMethod.invoke(oIStatusBarService,DISABLE_NAVIGATION,new Binder(),mContext.getPackageName()); }else{ disableMethod.invoke(oIStatusBarService,DISABLE_NONE,new Binder(),mContext.getPackageName()); } }catch (Exception e) { Log.e("status", e.toString(), e); } }
}
这用了反射机制,调用StatusManager 类的disable方法,将导航的功能禁用。该类是@hide的,对外是不可见,不可用,所以只能用反射了。
接下来要做的就是给应用添加权限
<uses-permission android:name="android.permission.STATUS_BAR"/>
<uses-permission android:name="android.permission.DISABLE_STATUS_BAR"/>
在manifest中添加android:sharedUserId="android.uid.system"属性
最后应用要签名:用signapk
java -jar signapk.jar certificate.pem key.pk8 your-app.apk your-signed-app.apk
最后就Ok了。
禁用应用中Android系统的导航栏(特别是平板)相关推荐
- 关于Android系统隐藏导航栏的两种方法
关于Android系统隐藏导航栏的两种方法 在NXP的imx6q和全志的A40I上试过 1.frameworks/base/core/res/res/values/dimens.xml中修改 < ...
- Android系统开启导航栏NavigationBar(虚拟按键)
导航栏NavigationBar 源码部分: frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManag ...
- Android隐藏导航栏按键,Android如何控制导航栏单个按键的显隐状态
我们都知道Android系统的导航栏通常有三个按键,分别是BACK, HOME, APP_SWITCH. 网上很多有关导航栏和状态栏显隐的文章,但几乎都是控制导航栏或状态栏所有按键同时显示或消失,如果 ...
- Android状态栏和导航栏透明和沉浸式模式
最近在App上需要对状态栏进行相关的设置,在网上看了些文章,像郭神的沉浸式那篇博客对我启发蛮大,但是对状态栏的设置,包括隐藏,透明,颜色设置等,并没有比较系统的概念,实现方式不止一种,有操作Windo ...
- android MIPI屏 导航栏丢失
/***************************************************************************** android MIPI屏 导航栏丢失* ...
- 固定导航栏android,Android 状态栏和导航栏的真终极解决方案
去年我写过一篇文章,透明状态栏和导航栏的终极解决方案,并在 Github 上开源了代码,https://github.com/Zackratos/UltimateBar,其实在那之后,我一直对这个项目 ...
- Android 10 修改导航栏的位置
Android 10 修改导航栏的位置 代码路径: frameworks/base/servicescore/java/com/android/server/wm/DisplayPolicy.java ...
- Android 华为虚拟导航栏适配
Android 华为虚拟导航栏适配 在写界面的时候 然后发现在界面最底下的几行文字 正好被虚拟导航栏遮挡住了,不滑动还看不到底下的文字,所以想隐去这些导航栏. 采用下面的代码将DecorView中的属 ...
- uniapp隐藏页面顶部导航栏和手机系统顶部导航栏
1.隐藏页面导航栏: pages.json文件 在"style":{ "app-plus":{ "titleNview": false } ...
最新文章
- IIS的应用程序池优化方法
- docker安装 kuboard v3 - 内建用户库
- 自定义工具类:工具类介绍
- Qt 第一步 HelloWorld 的第一个程序
- Spark 101:它是什么,它做什么以及为什么起作用
- CentOS6.4系统启动失败故障排查
- 微博拟全球发售1100万股 发售价不超388港元
- LaTeX Package cleveref: cleveref must be loaded after hyperref!. 的解决方案
- shell脚本之循环语句
- 磁盘被写保护怎么解除
- 2021年度上海公务员考试公告(11月05日开启)
- 用原生JS实现3D轮播效果
- oracle mysql sqlserver对比_Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)...
- 什么是物联卡,物联卡注意事项
- linux hostname的配置方法
- app error login.php,自定义错误Think\Think::appError 设计有问题!!
- 你知道遥控器的通信原理吗?
- [Node] Node.js Webpack和打包过程
- UIKeyboardTypeNumberPad和丢失的return键
- python什么意思d_python里d是什么意思
热门文章
- 前端学习(1963)vue之电商管理系统电商系统之控制级联选择框的选择范围
- 前端学习(1695):前端系列javascript之问题解答
- 前端学习(649):编译和解释性语言的区别
- spring mvc学习(35):restful的put
- java 序列化 protobuf_java序列化机制之protobuf(快速高效跨语言)
- vue-环境变量和模式
- 逃跑吧少年服务器临时维护中,逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁...
- channelsftp的put_java实现sftp客户端上传文件以及文件夹的功能代码
- java1.8 新特性
- redis启动警告解决