Android开发实现应用层面屏蔽状态栏的方法小结
本文实例讲述了android开发实现应用层面屏蔽状态栏的方法。分享给大家供大家参考,具体如下:
一、由于statusbarmanager在sdk中没有提供,所以需要使用反射来调用该类的方法
代码部分如下:
object service = getsystemservice("statusbar"); try { class <?> statusbarmanager = class.forname("android.app.statusbarmanager"); method expand = statusbarmanager.getmethod("disable",int.class); expand.invoke (service,0×00000001); } catch (exception e) { e.printstacktrace(); }
禁用通知栏需要添加以下权限并使用系统签名:
<uses-permission android:name="android.permission.status_bar"/> <uses-permission android:name="android.permission.disable_status_bar"/>
网上资料中有提到如果没有使用系统签名则会报如下错误
caused by: java.lang.securityexception: statusbarmanagerservice: neither user 10072 nor current process has android.permission.status_bar.
在使用系统签名之前需要
1.在应用程序的androidmanifest.xml中的manifest节点中加入android:shareduserid="android.uid.system"
2.修改android.mk文件,加入local_certificate:=platform
让程序运行到系统进程中
android中使应用程序获得系统签名权限方法:
1.需要在android系统源码的环境下用make来编译
(1)在应用程序的androidmanifest.xml中的manifest节点中加入android:shareduserid="android.uid.system"
(2)修改android.mk文件,加入local_certificate:=platform
(3)使用mm命令来编译生成apk即可
2.不需要在系统源码环境下编译
(1)在应用程序的androidmanifest.xml中的manifest节点中加入android:shareduserid="android.uid.system"
(2)使用eclipse编译出apk文件,此时的apk文件不可用
(3)用压缩软件打开apk文件,删掉meta-inf目录下的cert.sf和cert.rsa两个文件
(4)使用目标系统的platform密钥来重新给apk文件签名。首先要找到密钥文件,如"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件,然后用android提供的signapk工具来签名,该工具源码在"build\tools\signapk"下,用法是"signapk platform.x509.pem platform.pk8 input.apk output.apk"
原理:
首先加入android:shareduserid="android.uid.system"
这个属性,通过shareduserid拥有同一个user id的多个apk可以配置成运行在同一个进程中。那么把程序的uid配成android.uid.system,也就是要让程序运行在系统进程中,就具有相应的权限了。
但是只是加入uid还不够,这时候的apk是无法安装的,因为签名不符。程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法中的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中,第一个方法的local_certificate:=platform
其实就是用这两个key签名
这也有一个问题,就是这样生成的程序只有在原始的android系统或自己编译的系统中才可用,因为这样的系统才可以拿到platform.pk8和platform.x509.pem两个文件,要是别家公司的android系统连安装都安装不了。目前只是整理了资料,还没有进行实际开发,之后如果有实际应用这部分内容,会将最后结果整理发布。
二、如果是系统级应用,也就是手机厂家植入的应用,可以使用disable(int)
的方法来进行屏蔽,参数如上源码五个参数之一即可。但是如果是在应用层上的,disable方法因为权限问题无法使用(如果一定要使用必须具有系统签名)。这个时候可以使用collapse()
方法,现在的小米锁屏和360锁屏都是使用该方法,具体代码如下:
public void disablestatusbar(){ try { object service = getsystemservice("statusbar"); class<?> claz = class.forname("android.app.statusbarmanager"); method expand = claz.getmethod("collapse"); expand.invoke(service); } catch (exception e) { e.printstacktrace(); } }
重写activity的onwindowfocuschanged
方法,执行如上操作即可。 但是此种方法有严重的适配性问题,不同的系统下的回滚方法名不一样,需要对所有版本进行适配,非常繁琐。
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。