源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android开发实现应用层面屏蔽状态栏的方法小结

  • 时间:2021-03-26 12:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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节点中加入[code]android:sharedUserId="android.uid.system"[/code] 2.修改Android.mk文件,加入[code]LOCAL_CERTIFICATE:=platform[/code] 让程序运行到系统进程中 Android中使应用程序获得系统签名权限方法: 1.需要在Android系统源码的环境下用make来编译 (1)在应用程序的AndroidManifest.xml中的manifest节点中加入[code]android:sharedUserId="android.uid.system"[/code] (2)修改Android.mk文件,加入[code]LOCAL_CERTIFICATE:=platform[/code] (3)使用mm命令来编译生成APK即可 2.不需要在系统源码环境下编译 (1)在应用程序的AndroidManifest.xml中的manifest节点中加入[code]android:sharedUserId="android.uid.system"[/code] (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" [b]原理:[/b] 首先加入[code]android:sharedUserId="android.uid.system"[/code]这个属性,通过SharedUserId拥有同一个User ID的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,就具有相应的权限了。 但是只是加入UID还不够,这时候的APK是无法安装的,因为签名不符。程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法中的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中,第一个方法的[code]LOCAL_CERTIFICATE:=platform[/code]其实就是用这两个key签名 这也有一个问题,就是这样生成的程序只有在原始的Android系统或自己编译的系统中才可用,因为这样的系统才可以拿到platform.pk8和platform.x509.pem两个文件,要是别家公司的Android系统连安装都安装不了。目前只是整理了资料,还没有进行实际开发,之后如果有实际应用这部分内容,会将最后结果整理发布。 二、如果是系统级应用,也就是手机厂家植入的应用,可以使用[code]disable(int)[/code]的方法来进行屏蔽,参数如上源码五个参数之一即可。但是如果是在应用层上的,disable方法因为权限问题无法使用(如果一定要使用必须具有系统签名)。这个时候可以使用[code]collapse()[/code]方法,现在的小米锁屏和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的[code]onWindowfocuschanged[/code]方法,执行如上操作即可。 但是此种方法有严重的适配性问题,不同的系统下的回滚方法名不一样,需要对所有版本进行适配,非常繁琐。 更多关于Android相关内容感兴趣的读者可查看本站专题:《[url=http://www.1sucai.cn/Special/410.htm]Android开发入门与进阶教程[/url]》、《[url=http://www.1sucai.cn/Special/398.htm]Android多媒体操作技巧汇总(音频,视频,录音等)[/url]》、《[url=http://www.1sucai.cn/Special/381.htm]Android基本组件用法总结[/url]》、《[url=http://www.1sucai.cn/Special/375.htm]Android视图View技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/371.htm]Android布局layout技巧总结[/url]》及《[url=http://www.1sucai.cn/Special/124.htm]Android控件用法总结[/url]》 希望本文所述对大家Android程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部