您好,登錄后才能下訂單哦!
本篇內容主要講解“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開發怎么實現應用層面屏蔽狀態欄”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。