




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么禁止?fàn)顟B(tài)欄下拉
Android中怎么禁止?fàn)顟B(tài)欄下拉,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面在下將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。1.修改SystemUI路徑:==/frameworks/base/packages/SystemUI//src/com/android/systemui/statusbar/phone/PhoneStatusBar.Java==通過在PhoneStatusBar.java類中注冊一個廣播的方式來實(shí)現(xiàn)狀態(tài)欄的禁用和解除,其核心方法就是調(diào)用了disable()方法。disable()是SystemUI自定義的方法,感興趣的同學(xué)可以去看其具體實(shí)現(xiàn)。下面來看下我們在SystemUI中的具體實(shí)現(xiàn)代碼:@@
-494,6
+494,31
@@
public
class
PhoneStatusBar
extends
BaseStatusBar
implements
DemoMode
{
}
+
//add
steven
zhang
by
20160701
+
private
BroadcastReceiver
mStatusShowHide
=
new
BroadcastReceiver()
{
+
+
@Override
+
public
void
onReceive(final
Context
context,
Intent
intent)
{
+
//
TODO
Auto-generated
method
stub
+
String
action
=
intent.getAction();
+
+
if
("com.aura.statusbar.SHOW_OR_HIDE".equals(action))
{
+
//
StatusBarManager.DISABLE_NONE
+
//
StatusBarManager.DISABLE_EXPAND
+
final
int
mode
=
intent.getIntExtra("mode",
StatusBarManager.DISABLE_NONE);
+
if
(mNavigationBarView
!=
null)
{
+
mHandler.post(new
Runnable()
{
+
+
@Override
+
public
void
run()
{
+
+
disable(mode);
+
}
+
});
+
}
+
}
+
}
+
};
//micheal
add
the
Broadcast
interface
for
Control
the
wifi
sleep
mode
change
begin
20150514
private
BroadcastReceiver
wifiSleepModeChangeReceiver
=
new
BroadcastReceiver(){
@Override
@@
-519,6
+544,10
@@
public
class
PhoneStatusBar
extends
BaseStatusBar
implements
DemoMode
{
//
================================================================================
protected
PhoneStatusBarView
makeStatusBarView()
{
final
Context
context
=
mContext;
+
//
add
steven
zhang
by
20160701
+
IntentFilter
statusFilter
=
new
IntentFilter();
+
statusFilter.addAction("com.aura.statusbar.SHOW_OR_HIDE");
+
context.registerReceiver(mStatusShowHide,
statusFilter);既然顯示隱藏的廣播我們已經(jīng)注冊好了,那么看下我們在APP中的具體調(diào)用吧。@Override
protected
void
onResume()
{
super.onResume();
Intent
i
=
new
Intent("com.aura.statusbar.SHOW_OR_HIDE");
i.putExtra("mode",
StatusBarManager.DISABLE_EXPAND);
sendBroadcast(i);
}
@Override
protected
void
onPause()
{
super.onPause();
Intent
i
=
new
Intent("com.aura.statusbar.SHOW_OR_HIDE");
i.putExtra("mode",
StatusBarManager.DISABLE_NONE);
sendBroadcast(i);
}在Activity中重寫onResume和onPause方法實(shí)現(xiàn)狀態(tài)欄的禁用和解除禁用。另:StatusBarManager是一個隱藏類,所以調(diào)用的時候可能導(dǎo)入不了包會報(bào)錯,最簡單的方法就是之間用數(shù)值替換,下面列出對應(yīng)關(guān)系。public
static
final
int
DISABLE_EXPAND
=
0x00010000;
public
static
final
int
DISABLE_NOTIFICATION_ICONS
=
0x00020000;
public
static
final
int
DISABLE_NOTIFICATION_ALERTS
=
0x00040000;
public
static
final
int
DISABLE_NOTIFICATION_TICKER
=
0x00080000;
public
static
final
int
DISABLE_SYSTEM_INFO
=
0x00100000;
public
static
final
int
DISABLE_HOME
=
0x00200000;
public
static
final
int
DISABLE_RECENT
=
0x01000000;
public
static
final
int
DISABLE_BACK
=
0x00400000;
public
static
final
int
DISABLE_CLOCK
=
0x00800000;
public
static
final
int
DISABLE_SEARCH
=
0x02000000;
public
static
final
int
DISABLE_NONE
=
0x00000000;
public
static
final
int
DISABLE_NAVIGATION
=
View.STATUS_BAR_DISABLE_HOME
|
View.STATUS_BAR_DISABLE_RECENT;
public
static
final
int
DISABLE_MASK
=
DISABLE_EXPAND
|
DISABLE_NOTIFICATION_ICONS
|
DISABLE_NOTIFICATION_ALERTS
|
DISABLE_NOTIFICATION_TICKER
|
DISABLE_SYSTEM_INFO
|
DISABLE_RECENT
|
DISABLE_HOME
|
DISABLE_BACK
|
DISABLE_CLOCK
|
DISABLE_SEARCH;所以不能引用StatusBarManager的同學(xué)之間使用其數(shù)值是一樣的。如果有源碼的朋友,可以使用系統(tǒng)編譯的后frameworkjar包作為APP的lib就可以直接使用StatusBarManager方法了。其路徑為/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar。將classes.jar改為framework.jar導(dǎo)入工程就OK了。通過上面的步驟我們知道最關(guān)鍵的就是調(diào)用PhoneStatusBar中disable()方法,我們這里是以廣播的方式實(shí)現(xiàn)的,任何有新方法的同學(xué)可以腦洞大開,只要能實(shí)現(xiàn)調(diào)用到disable()就可以禁用狀態(tài)欄。2.修改PhoneWindowManager路徑:==/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java==//
monitor
for
system
gestures
mSystemGestures
=
new
SystemGesturesPointerEventListener(context,
new
SystemGesturesPointerEventListener.Callbacks()
{
@Override
public
void
onSwipeFromTop()
{
if
(isGestureIsolated())
return;
if
(mStatusBar
!=
null)
{
requestTransientBars(mStatusBar);
}
}
@Override
public
void
onSwipeFromBottom()
{
if
(isGestureIsolated())
return;
if
(mNavigationBar
!=
null
&&
mNavigationBarOnBottom)
{
requestTransientBars(mNavigationBar);
}
}
@Override
public
void
onSwipeFromRight()
{
if
(isGestureIsolated())
return;
if
(mNavigationBar
!=
null
&&
!mNavigationBarOnBottom)
{
requestTransientBars(mNavigationBar);
}
}
@Override
public
void
onDebug()
{
//
no-op
}
private
boolean
isGestureIsolated()
{
boolean
ret
=
false;
ret
=
Settings.System.getInt(mContext.getContentResolver(),"status_bar_disabled",
0)
==
1;
return
ret;
}
});在SystemGesturesPointerEventListener.Callbacks的方法中增加一個判斷函數(shù)isGestureIsolated()用于判斷是否支持其對應(yīng)的手勢操作。在這里特別說明一下,在網(wǎng)上找到方法用private
boolean
isGestureIsolated()
{
boolean
ret
=
false;
WindowState
win
=
mFocusedWindow
!=
null
?
mFocusedWindow:mTopFullscreenOpaqueWindowState;
if
(win
!=
null
&&
(win.getSystemUiVisibility()
&
View.SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED)
!=
0)
ret
=
true;
else
ret
=
false;
return
ret;
}getSystemUiVisibility()這種方式做判斷的時候,獲取到的win不一定是當(dāng)前activity的,有時候是statusbar的,所以這樣的效果不是很好,經(jīng)常會下拉出狀態(tài)欄,于是就有了Settings.System.getInt(mContext.getContentResolver(),"status_bar_disabled",
0)
==
1;做判斷的方法,用這種方式有一個好處就是非常直接,需要它禁止下拉的時候,就調(diào)用Settings.System.putInt(getContentResolver(),
"status_bar_disabled",
1);就OK了,解除禁止的時候調(diào)用Settings.System.putInt(getContentResolver(),
"status_bar_disabled",
0);看下Activity中的具體調(diào)用@Override
protected
void
onResume()
{
super.onResume();
//禁止下拉
Settings.System.putInt(getContentResolver(),
"status_bar_disabled",
1);
}
@Override
protected
void
onPause()
{
super.onPause();
//解除禁止
Settings.System.putInt(getContentResolver(),
"status_bar_disabled",
0);
}在AndroidManifest.xml中聲明相應(yīng)的權(quán)限<uses-permission
android:name="android.permission.WRITE_SETTINGS"
/>網(wǎng)上還有修改PhoneWindowManager中的adjustSystemUiVisibilityLw方法的,如:@Override
public
int
adjustSystemUiVisibilityLw(int
visibility){
if
(Settings.System.getInt(mContext.getContentResolver(),"status_bar_disabled",
0)
==
0)
{
mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags,
visibility);
}
mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags,
visibility);
//
Reset
any
bits
in
mForceClearingStatusBarVisibility
that
//
are
now
clear.
mResettingSystemUiFlags
&=
visibility;
//
Clear
any
bits
in
the
new
visibility
that
are
currently
being
//
force
cleared,
before
reporting
it.
return
visibility
&
~mResettingSystemUiFlags
&
~mForceClearedSystemUiFlags;
}在adjustSystemUiVisibilityLw增加一個標(biāo)志的判斷,但這種實(shí)現(xiàn)的效果也不是很好,還是會出現(xiàn)下拉能拉下來的情況。綜上所敘,修改PhoneWindowManager實(shí)現(xiàn)禁止下拉的方法還是在SystemGesturesPointerEventListener.Callbacks中增加一個內(nèi)部方法,這個內(nèi)部方法使用標(biāo)志位的形式來判斷是否支持狀態(tài)欄下拉。3.使用StatusBarManager中方法因?yàn)镾tatusBarManager是隱藏方法,所以要在IDE中直接使用的話要導(dǎo)入frameworkjar包,怎么找到frameworkjar在1.修改SystemUI中有說過,這里就不重復(fù)了。直接上代碼:1.在AndroidManifest.xml中聲明相應(yīng)的權(quán)限<uses-permission
android:name="android.permission.STATUS_BAR"/>
<uses-permission
android:name="android.permission.EXPAND_STATUS_BAR"/>網(wǎng)上有文章說要聲明android
:
sharedUserId="android.uid.system"親自測試沒有加上面這行代碼,也是可以使用的。2.在Activity中的引用@Override
protected
void
onResume()
{
super.onResume();
StatusBarManager
statusBarManager
=
(StatusBarManager)
getSystemService(Context.STATUS_BAR_SERVICE);
statusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
}
@Override
protected
void
onPause()
{
super.onPause();
StatusBarManager
statusBarManager
=
(StatusBarManager)
getSystemService(Context.STATUS_BAR_SERVICE);
statusBarManager.disable(StatusBarManager.DISABLE_NONE);
}1.是使用系統(tǒng)簽名,編譯為系統(tǒng)appjava
-jar
signapk.jar
platform.x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省長汀、連城一中等六校聯(lián)考2024-2025學(xué)年高三5月份綜合模擬檢測試題英語試題含解析
- 2025年甘肅省天水市清水縣第六中學(xué)高三年級調(diào)研測試(英語試題)試題含解析
- 云南三鑫職業(yè)技術(shù)學(xué)院《土木工程施工設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 松原市前郭爾羅斯蒙古族自治縣2024-2025學(xué)年數(shù)學(xué)五年級第二學(xué)期期末達(dá)標(biāo)檢測模擬試題含答案
- 第11課 元朝的建立與統(tǒng)一 教案2024-2025學(xué)年七年級歷史下冊新課標(biāo)
- 現(xiàn)階段在高中生中大規(guī)模推廣體育運(yùn)動種類的調(diào)研
- 裝修鋼結(jié)構(gòu)施工方案
- 加固現(xiàn)澆閣樓施工方案
- 坡屋面保溫施工方案
- 外墻保溫膠泥施工方案
- 2024-2029年中國體外診斷試劑行業(yè)市場全景調(diào)研與投資前景預(yù)測報(bào)告
- 2024年高考英語作文【5篇】
- 結(jié)直腸癌免疫治療
- 老年學(xué)概論(第3版) 課件 第5-7章 衰老生物學(xué)、老年人口學(xué)、老年心理學(xué)
- 人教版八年級物理下冊《第八章運(yùn)動和力》單元測試卷-含答案
- 江蘇省南京師范大學(xué)附屬中學(xué)樹人學(xué)校2023-2024學(xué)年九年級下學(xué)期3月月考數(shù)學(xué)試卷
- 阿拉伯國家聯(lián)盟課件
- 油氣管道視頻監(jiān)控系統(tǒng)總體設(shè)計(jì)方案
- 毫米波集成電路詳述
- 打印設(shè)備維護(hù)服務(wù)投標(biāo)方案
- JGT454-2014 建筑門窗、幕墻中空玻璃性能現(xiàn)場檢測方法
評論
0/150
提交評論