1. 程式人生 > >[RK3288][Android6.0] 除錯筆記 --- 動態顯示和隱藏導航欄(廣播方式)

[RK3288][Android6.0] 除錯筆記 --- 動態顯示和隱藏導航欄(廣播方式)

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

此文實現以廣播的形式動態顯示和隱藏導航欄,這樣不僅避免了系統通過了自帶只針對Activity顯示和隱藏的不便(比如一個app有N多個Activity),而且可以在任何地方去動態修改。
改動:

diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 7
c73b83..7da188d 100755 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -204,6 +204,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, DragDownHelper.DragDownCallback
, ActivityStarter, OnUnlockMethodChangedListener, HeadsUpManager.OnHeadsUpChangedListener {
static final String TAG = "PhoneStatusBar"; + /*Kris, 170726, hide/show NavigationBar dynamicly. {*/ + static final String HIDE_NAVIGATION_BAR = "android.intent.action.HIDE_NAVIGATION_BAR"; + static
final String SHOW_NAVIGATION_BAR = "android.intent.action.SHOW_NAVIGATION_BAR"; + /*Kris, 170726, hide/show NavigationBar dynamicly. }*/ public static final boolean DEBUG = BaseStatusBar.DEBUG; public static final boolean SPEW = false; public static final boolean DUMPTRUCK = true; // extra dumpsys info @@ -1069,6 +1073,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, demoFilter.addAction(ACTION_FAKE_ARTWORK); } demoFilter.addAction(ACTION_DEMO); + /*Kris, 170726, hide/show NavigationBar dynamicly. {*/ + demoFilter.addAction(HIDE_NAVIGATION_BAR); + demoFilter.addAction(SHOW_NAVIGATION_BAR); + /*Kris, 170726, hide/show NavigationBar dynamicly. }*/ context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter, android.Manifest.permission.DUMP, null); @@ -1304,9 +1312,48 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams()); } + /*Kris, 170726, hide/show NavigationBar dynamicly. {*/ + private void addNavigationBarInnerLocked(){ + if(mNavigationBarView == null){ + mNavigationBarView = (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null); + mNavigationBarView.setDisabledFlags(mDisabled1); + mNavigationBarView.setBar(this); + mNavigationBarView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + checkUserAutohide(v, event); + return false; + } + }); + if (mNavigationBarView == null) + return; + prepareNavigationBarView(); + try { + mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams()); + } catch (Exception e) { + } + } + } + + private void removeNavigationBar() { + if (mNavigationBarView == null) + return; + mWindowManager.removeView(mNavigationBarView); + mNavigationBarView = null; + } + + public void displayNavigation(){ + addNavigationBarInnerLocked(); + } + public void hideNavigation(){ + removeNavigationBar(); + } + /*Kris, 170726, hide/show NavigationBar dynamicly. }*/ + private void repositionNavigationBar() { if (mNavigationBarView == null || !mNavigationBarView.isAttachedToWindow()) return; + prepareNavigationBarView(); mWindowManager.updateViewLayout(mNavigationBarView, getNavigationBarLayoutParams()); @@ -3117,7 +3164,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (DEBUG_MEDIA_FAKE_ARTWORK) { updateMediaMetaData(true); } - } + /*Kris, 170726, hide/show NavigationBar dynamicly. {*/ + } else if(HIDE_NAVIGATION_BAR.equals(action)){ + hideNavigation(); + }else if(SHOW_NAVIGATION_BAR.equals(action)){ + displayNavigation(); + } + /*Kris, 170726, hide/show NavigationBar dynamicly. }*/ } };

測試:
隱藏:
[email protected]:/ # am broadcast -a android.intent.action.HIDE_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.HIDE_NAVIGATION_BAR }
Broadcast completed: result=0
這裡寫圖片描述

顯示:
[email protected]:/ # am broadcast -a android.intent.action.SHOW_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.SHOW_NAVIGATION_BAR }
Broadcast completed: result=0
這裡寫圖片描述

相關推薦

[RK3288][Android6.0] 除錯筆記 --- 動態顯示隱藏導航(廣播方式)

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 此文實現以廣播的形式動態顯示和隱藏導航欄,這樣不僅避免了系統通過了自帶只針對Activity顯示和隱藏的不便(比如一個app有N多個Activity)

[RK3288][Android6.0] 除錯筆記 --- 螢幕顯示旋轉方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 顯示模組提供了一個property供修改旋轉方向,名為”ro.sf.hwrotation”,有四個值可選 Surface.java /** *

[RK3288][Android6.0] 除錯筆記 --- eMMC分割槽號名字的對應

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有時候需要知道mmcblk對應的分割槽是哪一個,其實驅動已經完成這個功能了,如下: [email protected]:/dev/blo

[RK3288][Android6.0] 除錯筆記 --- 遮蔽系統下拉選單顯示

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 [email protected]:~/rk3288/frameworks/base/

[RK3288][Android6.0] 除錯筆記 --- 移除ubootkernel開機logo

Platform: RockchipOS: Android 6.0Kernel: 3.10.92diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dtsindex ad3bc1a.

[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不

[RK3288][Android6.0] 除錯筆記 --- user版本預設顯示開發者選項

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 預設user版本不顯示開發者選項這一欄,需要通過連續點選版本號7次來顯示.packages\apps\Settings\src\com\android\settings\D

[RK3288][Android6.0] 除錯筆記 --- 螢幕畫面顯示不完整問題

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 今天看到網友發的圖片,想起了之前除錯的一塊屏顯示畫面也不完整,類似下圖 後來驗證是導航欄(Navigation Bar)顯示異常引起的,禁止此項功能

[RK3288][Android6.0] 除錯筆記 --- date命令無法修改日期時間

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 現象: 移植好RTC驅動後之後,發現無法用date命令去設定日期。 用的命令是 #date -s "0627154217" //mmddhhmmy

[RK3288][Android6.0] 除錯筆記 --- 普通串列埠的新增

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 uart0,1,3,4 (普通串列埠) 用的是同一個串列埠驅動. uart2(除錯串列埠)的驅動程式碼嵌在fiq debugger的code中. 相關的配置在rk3288.dtsi中:

[RK3288][Android6.0] 除錯筆記 --- hwclock命令無法使用

Platform: Rockchip  OS: Android 6.0  Kernel: 3.10.92 現象:  使用hwclock,提示找不到檔案 [email protected]:/ # hwclock                          

[RK3288][Android6.0] 除錯筆記 --- I2C通訊失敗問題

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 使用rk3288的i2c5讀寫時,會出現以下error log: [email prot

[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法

[RK3288][Android6.0] 除錯筆記 --- user版本串列埠只有輸出不能輸入

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92現象: 編譯成user版本之後串列埠只有輸出沒有輸入.原因: 編譯user版本之後 ro.debug

[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果

[RK3288][Android6.0] 除錯筆記 --- Audio驅動層判斷錄音資料是否異常

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前有提到上層可以通過dump pcm資料檢視波形來確定錄音取樣的資料是否正常,這裡給出驅動層檢視

[RK3288][Android6.0] 除錯筆記 --- 除錯串列埠的更換

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假設專案有需求要將除錯串列埠uart2 改成 uart1, 改動如下 (還未驗證,先分享給大家,

[RK3288][Android6.0] 除錯筆記 --- pmu(rk818)暫存器讀寫

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk的pmu模組只提供了每次單個暫存器的讀寫,驅動提供了這個節點供使用:/sys/rk818/rk818_test 舉例: 讀取: echo r

[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動: init.rk30board.

[RK3288][Android6.0] 除錯筆記 --- eMMC壞塊測試

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 網上搜到一個叫eMMC Brickbug Check的apk 啟動后里面的Check Memory一項提示要root,但是系統已經是root過的了,