Android開發(fā)實現(xiàn)應(yīng)用層面屏蔽狀態(tài)欄的方法小結(jié)
本文實例講述了Android開發(fā)實現(xiàn)應(yīng)用層面屏蔽狀態(tài)欄的方法。分享給大家供大家參考,具體如下:
一、由于StatusBarManager在SDK中沒有提供,所以需要使用反射來調(diào)用該類的方法
代碼部分如下:
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();
}
禁用通知欄需要添加以下權(quán)限并使用系統(tǒng)簽名:
<uses-permission android:name="android.permission.STATUS_BAR"/> <uses-permission android:name="android.permission.DISABLE_STATUS_BAR"/>
網(wǎng)上資料中有提到如果沒有使用系統(tǒng)簽名則會報如下錯誤
Caused by: Java.lang.SecurityException: StatusBarManagerService: Neither user 10072 nor current process has android.permission.STATUS_BAR.
在使用系統(tǒng)簽名之前需要
1.在應(yīng)用程序的AndroidManifest.xml中的manifest節(jié)點中加入android:sharedUserId="android.uid.system"
2.修改Android.mk文件,加入LOCAL_CERTIFICATE:=platform
讓程序運行到系統(tǒng)進程中
Android中使應(yīng)用程序獲得系統(tǒng)簽名權(quán)限方法:
1.需要在Android系統(tǒng)源碼的環(huán)境下用make來編譯
(1)在應(yīng)用程序的AndroidManifest.xml中的manifest節(jié)點中加入android:sharedUserId="android.uid.system"
(2)修改Android.mk文件,加入LOCAL_CERTIFICATE:=platform
(3)使用mm命令來編譯生成APK即可
2.不需要在系統(tǒng)源碼環(huán)境下編譯
(1)在應(yīng)用程序的AndroidManifest.xml中的manifest節(jié)點中加入android:sharedUserId="android.uid.system"
(2)使用eclipse編譯出APK文件,此時的APK文件不可用
(3)用壓縮軟件打開APK文件,刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個文件
(4)使用目標(biāo)系統(tǒng)的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,也就是要讓程序運行在系統(tǒng)進程中,就具有相應(yīng)的權(quán)限了。
但是只是加入UID還不夠,這時候的APK是無法安裝的,因為簽名不符。程序想要運行在系統(tǒng)進程中還要有目標(biāo)系統(tǒng)的platform key,就是上面第二個方法中的platform.pk8和platform.x509.pem兩個文件。用這兩個key簽名后apk才真正可以放入系統(tǒng)進程中,第一個方法的LOCAL_CERTIFICATE:=platform其實就是用這兩個key簽名
這也有一個問題,就是這樣生成的程序只有在原始的Android系統(tǒng)或自己編譯的系統(tǒng)中才可用,因為這樣的系統(tǒng)才可以拿到platform.pk8和platform.x509.pem兩個文件,要是別家公司的Android系統(tǒng)連安裝都安裝不了。目前只是整理了資料,還沒有進行實際開發(fā),之后如果有實際應(yīng)用這部分內(nèi)容,會將最后結(jié)果整理發(fā)布。
二、如果是系統(tǒng)級應(yīng)用,也就是手機廠家植入的應(yīng)用,可以使用disable(int)的方法來進行屏蔽,參數(shù)如上源碼五個參數(shù)之一即可。但是如果是在應(yīng)用層上的,disable方法因為權(quán)限問題無法使用(如果一定要使用必須具有系統(tǒng)簽名)。這個時候可以使用collapse()方法,現(xiàn)在的小米鎖屏和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方法,執(zhí)行如上操作即可。 但是此種方法有嚴(yán)重的適配性問題,不同的系統(tǒng)下的回滾方法名不一樣,需要對所有版本進行適配,非常繁瑣。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
- android 動態(tài)控制狀態(tài)欄顯示和隱藏的方法實例
- Android 去掉狀態(tài)欄的方法匯總
- Android 實現(xiàn)沉浸式狀態(tài)欄的方法
- Android自定義狀態(tài)欄顏色與應(yīng)用標(biāo)題欄顏色一致
- Android實現(xiàn)的狀態(tài)欄定制和修改方法
- Android 取得狀態(tài)欄、任務(wù)欄高度的小例子
- Android之沉浸式狀態(tài)欄的實現(xiàn)方法、狀態(tài)欄透明
- Android 4.4以上"沉浸式"狀態(tài)欄效果的實現(xiàn)方法
- Android 狀態(tài)欄虛擬導(dǎo)航鍵透明效果的實現(xiàn)方法
- Android編程實現(xiàn)禁止StatusBar下拉的方法
- Android編程實現(xiàn)禁止?fàn)顟B(tài)欄下拉的方法詳解
相關(guān)文章
Android Service中使用Toast無法正常顯示問題的解決方法
這篇文章主要介紹了Android Service中使用Toast無法正常顯示問題的解決方法,分析了Service中Toast無法正常顯示的原因與相關(guān)的解決方法,具有一定參考借鑒價值,需要的朋友可以參考下2016-10-10
Android編程錄音工具類RecorderUtil定義與用法示例
這篇文章主要介紹了Android編程錄音工具類RecorderUtil定義與用法,結(jié)合實例形式分析了Android錄音工具類實現(xiàn)開始錄音、停止錄音、取消錄音、獲取錄音信息等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Android下通過httpClient發(fā)送GET和POST請求的實例代碼
這篇文章介紹了Android下通過httpClient發(fā)送GET和POST請求的實例代碼,有需要的朋友可以參考一下2013-08-08
native.js獲取手機硬件基本信息實例代碼android版
本文為大家分享了native.js獲取手機硬件基本信息實例代碼android版包括手機MAC地址,手機內(nèi)存大小,手機存儲空間大小,手機CPU信息等手機硬件基本信息2018-09-09
Android ViewPager中顯示圖片與播放視頻的填坑記錄
這篇文章主要給介紹了關(guān)于Android ViewPager中顯示圖片與播放視頻的一些填坑記錄,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-05-05
Android viewpage實現(xiàn)可控制的禁止滑動
這篇文章主要為大家詳細介紹了Android viewpage實現(xiàn)可控制的禁止滑動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Android自定義view實現(xiàn)滑動解鎖九宮格控件
這篇文章主要介紹了Android自定義view實現(xiàn)滑動解鎖九宮格控件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02

