android4.4上全屏界面实现禁止状态栏下拉

附上我改动的方法:PhoneWindowManager.java里面的改动

--- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -2863,7 +2863,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     @Override
     public int adjustSystemUiVisibilityLw(int visibility) {
-        mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
+       if(Settings.System.getInt(mContext.getContentResolver(),"factorytest.touch.mode",0) == 0){
+                mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
+       }
         mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
         // Reset any bits in mForceClearingStatusBarVisibility that

Acitvity里面使用例如以下方式:

--- a/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java
+++ b/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java
@@ -32,6 +32,8 @@ import android.view.WindowManager;
 import java.util.ArrayList;
 import java.util.List;
+import android.provider.Settings;
+import android.app.StatusBarManager;
 public class TestTouchPanelLine2 extends Activity {
        private static final String TAG = "TestTouchPanelLine";
@@ -54,6 +56,7 @@ public class TestTouchPanelLine2 extends Activity {
        private static final int MSG_TEST_PANEL_NEXT_ITEM = 100;
        private static final int MSG_TEST_PANEL_START = 101;
        private static final int MSG_TEST_PANEL_STOP = 102;
+       private StatusBarManager mStatusBarManager;
        private Handler mInHandler = new Handler() {
                @Override
@@ -94,6 +97,12 @@ public class TestTouchPanelLine2 extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
@@ -141,8 +150,22 @@ public class TestTouchPanelLine2 extends Activity {
                                .obtainMessage(FactoryTestMessage.MSG_OPEN_UI_OK);
                msg.arg1 = (int) ID;
                mOutHandler.sendMessage(msg);
+               mStatusBarManager = (StatusBarManager) this.getSystemService(Context.STATUS_BAR_SERVICE);
+               int state= StatusBarManager.DISABLE_EXPAND;
+                   state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
+                   state |=  StatusBarManager.DISABLE_SYSTEM_INFO;
+               mStatusBarManager.disable(state);
        }
+           @Override
+           protected void onPause() {
+               int state =  StatusBarManager.DISABLE_NONE;
+               mStatusBarManager.disable(state);
+               super.onPause();
+           }
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                // 是否触发按键为back键

下面是从MTK Online 上面找到的解决方式。保留备用。

Google从KK開始添加了状态栏透明以及全屏界面有通知能够下拉状态栏的设计,而这个设计出现的隐患是设置了FULL_SCREEN的界面是无法禁止状态栏下拉的。这样对一些project測试app可能会造成一定的影响。可是以google默认的设计,应用端无法改动此设计来满足自己的需求。

MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏,假设贵司的代码还没有这部分逻辑,请參考例如以下:

1. frameworks\base\core\java\android\view\View.java

  public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000;
+    /**
+     * @hide
+     *
+     * NOTE: Flag for {@link #setSystemUiVisibility(int)}: It help user to disable transient
+     * status bar triggered by gesture
+     */
+    public static final int SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED = 0x00002000;

2. 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() {
+                        WindowState win = mFocusedWindow != null ? mFocusedWindow : mTopFullscreenOpaqueWindowState;
+                        if (win != null && (win.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED) != 0)
+                            return true;
+                        else
+                            return false;
+                    }
                });

3. 請在改动完framework后,將测試app用setSystemUiVisibility的API加上SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED的flag

时间: 2024-10-31 08:06:02

android4.4上全屏界面实现禁止状态栏下拉的相关文章

KK上全屏界面如何实现禁止状态栏下拉?

[SOLUTION] Google从KK开始增加了状态栏透明以及全屏 界面有通知可以下拉状态栏的设计,而这个设计出现的隐患是设置了FULL_SCREEN的界面是无法禁止状态栏下拉的,这样对一些工程测试app可能会造 成一定的影响,但是以google默认的设计,应用端无法修改此设计来满足自己的需求. MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏,如果贵司的代码还没有这部分逻辑,请参考如下: 1. frameworks\base\core\java\android\view\View

Android 禁止状态栏下拉

概述 因为需求所以贴出该代码,该源码需要系统共享,且开源板子上才能安装,其次需要将编译的apk进行platform签名,仅仅是记录一下开发过程. public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Object statusBarManagerService; private Method methodDisable; private TextView tvIn

android禁止状态栏下拉

[html] view plaincopyprint? public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub System.out.println("hasfocus--->>>" + hasFocus); super.onWindowFocusChanged(hasFocus); try { Object service = getSystemS

仿QQ视频全屏界面旋转实现

// 实现效果:界面支持系统自动转屏和点击转屏 // ViewController.m // rotatoTest // Copyright © 2016年 yaoyao. All rights reserved. // 1.关闭系统自动转屏 // 2.获取设备方向,设置转屏, // 3.点击按钮,设置转屏 #import "ViewController.h" #import <UIKit/UIKit.h> #import <CoreGraphics/CoreGrap

一步使你的asp.net网站在手机浏览器上全屏显示

一步使你的asp.net网站在手机浏览器上全屏显示 1.问题 公司的asp.net网页在手机浏览器上初始化时显示的是缩放的页面,用户必须手动放大才能看清页面的字体,这样体验不好 2.解决 前段时间学习JQuery mobile 看到所有的demo页面都能全屏显示在手机上,页面上面都有这样一段代码: ? 1 <meta name="viewport" content="width=device-width, initial-scale=1"> 参数说明:

Android UI体验之全屏沉浸式透明状态栏效果

前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体验.而Android 5.0之后谷歌又提出了 ColorPalette 的概念,让开发者可以自己设定系统区域的颜色,使整个 App 的颜色风格和系统的颜色风格保持统一.今天学习总结一下如何实现Android 4.4以上全屏沉浸式透明状态栏效果.先看下预期效果: 首先现分清楚哪部分是状态栏,哪部分是导

android6.0中全屏处理(禁止通知栏下滑)

在android6.0项目中,因需要做全屏处理,故在此整理出全屏时禁止通知栏下滑的代码,希望可以帮助到也有如此困惑的人. 1.在onCreate中添加://设置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 2.在onResum

asp.net网站在手机浏览器上全屏显示

前段时间要把asp.net 网站,在手机上全屏浏览,发现总是小小的一块,不能全屏 后来发现 JQuery Mobile  中在开头都用 <meta name="viewport" content="width=device-width, initial-scale=1"> 然后在项目中加上以后就可以全屏显示了 参数说明: width - viewport的宽度 height - viewport的高度 initial-scale - 初始的缩放比例 mi

x5webview 自定义全屏界面

集成X5WEBVIEW可以选择全屏模式为标准全屏还是x5全屏,而不设置默认为false. 首先看看标准全屏的基本设置, if (webView.getX5WebViewExtension() != null) { Bundle data = new Bundle(); data.putBoolean("standardFullScreen", false);// true表示标准全屏,false表示X5全屏:不设置默认false, data.putBoolean("suppo