当前位置: 代码迷 >> 综合 >> 全志A40i Android7.1 动态隐藏 状态栏和导航栏
  详细解决方案

全志A40i Android7.1 动态隐藏 状态栏和导航栏

热度:30   发布时间:2024-03-08 07:17:15.0

客户要求系统提供接口实现该功能,通过广播方式实现,

验证网友方案记录如下,对网友分享非常感谢:

代码如下;

 

+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -418,6 +418,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

     private int mNavigationIconHints = 0;
     private HandlerThread mHandlerThread;
+    //Navigation
+    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";

+    //Navigation

     // ensure quick settings is disabled until the current user makes it through the setup wizard
     private boolean mUserSetup = false;
@@ -1003,6 +1009,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         demoFilter.addAction(ACTION_DEMO);
         context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter,
                 android.Manifest.permission.DUMP, null);
+//Navigatioin
+        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);
+//Navigation

         // listen for USER_SETUP_COMPLETE setting (per-user)
         resetUserSetupObserver();
@@ -3546,6 +3560,33 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         }, cancelAction, afterKeyguardGone);
     }

+//Navigation
+    private BroadcastReceiver carBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Log.e(TAG, "bluesky--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);
+
+           }
+        }
+    };

+//Navigation
+
     private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -3945,6 +3986,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         }
         mContext.unregisterReceiver(mBroadcastReceiver);
         mContext.unregisterReceiver(mDemoReceiver);
+        mContext.unregisterReceiver(carBroadcastReceiver);
+
         mAssistManager.destroy();

 

 

App添加按钮实现函数:

public void showbar(View view) {Intent i = new Intent("car.intent.systemui.shownavigation");sendBroadcast(i);Intent status = new Intent("car.intent.systemui.showstatusbar");sendBroadcast(status);
}public void hidebar(View view) {Intent i = new Intent("car.intent.systemui.hidenavigation");sendBroadcast(i);Intent status = new Intent("car.intent.systemui.hidestatusbar");sendBroadcast(status);
}

 

当然可以通过app实现隐藏app api也可以,但是发现触摸屏幕状态栏能够显示出来;有些问题,方法也写出来:

在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);