android7.1动态显示和隐藏状态栏和导航栏

前言

      由于公司应用不知道如何隐藏状态栏和导航栏,要求系统提供接口实现该功能,没有办法,搞系统开发的苦逼青年们就得满足各种要求,即使知道不合理!下面是具体实现,应用只要发送相应的广播即可达到动态显示和隐藏的目的。

实现

zhoujy@TP:~/data/android/sc826_cn_01_00/msm_8953_git$ git diff
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index c3d8340..d429083 100755
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -435,6 +435,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
     private int mNavigationIconHints = 0;
     private HandlerThread mHandlerThread;
+    private static final String SHOW_NAVIGATION = "car.intent.systemui.shownavigation";
+    private static final String HIDE_NAVIGATION = "car.intent.systemui.hidenavigation";
+    private static final String SHOW_STATUSBAR = "car.intent.systemui.showstatusbar";
+    private static final String HIDE_STATUSBAR = "car.intent.systemui.hidestatusbar";
 
     // ensure quick settings is disabled until the current user makes it through the setup wizard
     private boolean mUserSetup = false;
@@ -1062,7 +1066,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         demoFilter.addAction(ACTION_DEMO);
         context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter,
                 android.Manifest.permission.DUMP, null);
-
+       IntentFilter carfilter = new IntentFilter();
+        carfilter.addAction(SHOW_NAVIGATION);
+        carfilter.addAction(HIDE_NAVIGATION);
+       carfilter.addAction(SHOW_STATUSBAR);
+       carfilter.addAction(HIDE_STATUSBAR);
+        context.registerReceiverAsUser(carBroadcastReceiver, UserHandle.ALL, carfilter, null, null);
         // listen for USER_SETUP_COMPLETE setting (per-user)
         resetUserSetupObserver();
 
@@ -3660,6 +3669,30 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         }, cancelAction, afterKeyguardGone);
     }
 
+     private BroadcastReceiver carBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Log.e(TAG, "zjy--onReceive: " + intent);
+            String action = intent.getAction();
+            if (HIDE_NAVIGATION.equals(action)) {
+                if (mNavigationBarView == null) return;
+
+                mWindowManager.removeViewImmediate(mNavigationBarView);
+                mNavigationBarView = null;
+            }else if (SHOW_NAVIGATION.equals(action)) {
+                if (mNavigationBarView != null) return;
+               createNavigationBarView(context);
+               addNavigationBar();
+            }else if(HIDE_STATUSBAR.equals(action)) {
+               //mStatusBarView.setVisibility(View.GONE);
+               mStatusBarWindow.setVisibility(View.GONE);
+           }else if(SHOW_STATUSBAR.equals(action)) {
+               //mStatusBarView.setVisibility(View.VISIBLE);
+               mStatusBarWindow.setVisibility(View.VISIBLE);
+       
+           }
+        }
+    };
     private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -4062,6 +4095,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         }
         mContext.unregisterReceiver(mBroadcastReceiver);
         mContext.unregisterReceiver(mDemoReceiver);
+       mContext.unregisterReceiver(carBroadcastReceiver);
         mAssistManager.destroy();
 
         final SignalClusterView signalCluster =

用法

   在Activity的onResume()方法中隐藏状态栏和导航栏,在onStop()方法中显示状态栏和导航栏。

   @Override
    protected void onResume() {
        super.onResume();
        Intent i = new Intent("car.intent.systemui.hidenavigation");
        sendBroadcast(i);
        Intent status = new Intent("car.intent.systemui.hidestatusbar");
        sendBroadcast(status);
        Log.d(TAG,"onResume");
    }
  @Override
    protected void onStop() {
        super.onStop();
        Intent i = new Intent("car.intent.systemui.shownavigation");
        sendBroadcast(i);
        Intent status = new Intent("car.intent.systemui.showstatusbar");
        sendBroadcast(status);
        Log.d(TAG,"onStop");
    }

后记

   其实应用也是可以隐藏状态栏和导航栏的,由于很多做应用的同仁们不愿意查,公司有系统开发就要求系统工程师满足他们一切功能,这样达不到学习的目的,技术也难以提高,具体实现是在Activity的onCreate方法中添加如下方法即可:

 Window window = getWindow();
 WindowManager.LayoutParams params = window.getAttributes();
 params.systemUiVisibility =  View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE;
 window.setAttributes(params);

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值