[RK3288][Android6.0] 调试笔记 --- 动态显示和隐藏导航栏(广播方式)
来源:互联网 发布:剑灵身材数据 编辑:程序博客网 时间:2024/06/05 10:33
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
直接移除导航栏在 [RK3288][Android6.0] 调试笔记 — 移除导航栏(虚拟按键) 已经给出,
此文实现以广播的形式动态显示和隐藏导航栏,这样不仅避免了系统通过了自带只针对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.javaindex 7c73b83..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. }*/ } };
测试:
隐藏:
root@rk3288:/ # am broadcast -a android.intent.action.HIDE_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.HIDE_NAVIGATION_BAR }
Broadcast completed: result=0
显示:
root@rk3288:/ # am broadcast -a android.intent.action.SHOW_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.SHOW_NAVIGATION_BAR }
Broadcast completed: result=0
参考:
在命令行中通过adb shell am broadcast发送广播通知
阅读全文
1 0
- [RK3288][Android6.0] 调试笔记 --- 动态显示和隐藏导航栏(广播方式)
- [RK3288][Android6.0] 调试笔记 --- 隐藏系统状态栏的方法
- [RK3288][Android6.0] 调试笔记 --- Launcher中隐藏APK图标
- [RK3288][Android6.0] 调试笔记 --- 移除导航栏(虚拟按键)
- [RK3288][Android6.0] 调试笔记 --- 禁止导航栏中的home key
- [RK3288][Android6.0] 调试笔记 --- AndroidTool两种低格方式
- [RK3288][Android6.0] 调试笔记 --- Camera动态热插拔支持
- [RK3288][Android6.0] 调试笔记 --- 屏蔽系统下拉菜单显示
- [RK3288][Android6.0] 调试笔记 --- 屏幕显示旋转方法
- [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%
- [RK3288][Android6.0] 调试笔记 --- 双屏显示内核Patch
- [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别
- [RK3288][Android6.0] SystemUI加载过程(状态栏和导航栏)
- [RK3288][Android6.0] 调试笔记 --- Recovery模式下显示旋转180度
- [RK3288][Android6.0] 调试笔记 --- user版本默认显示开发者选项
- [RK3288][Android6.0] 调试笔记 --- 设置系统默认显示为竖屏
- [RK3288][Android6.0] 调试笔记 --- 强制第三方apk横屏显示
- [RK3288][Android6.0] 调试笔记 --- 屏幕画面显示不完整问题
- delphi中httpencode使用注意事项
- 关于斜杠与反斜杠的区别
- 虚IP
- web.xml文件加载过程微了解
- hdu1062 Text Reverse(C语言)
- [RK3288][Android6.0] 调试笔记 --- 动态显示和隐藏导航栏(广播方式)
- 随便写点关于卡尔曼滤波
- Boost在Windows的使用VS2015配置及使用
- 虚拟机上安装SVN服务
- 二叉搜索树
- 今天突然看到一篇介绍WIN98的文章,才发现原来真的老了
- 数据库——(16)函数
- 一文弄懂神经网络中的反向传播法——BackPropagation
- KMP count the string 暴力解法