附上我修改的方法:PhoneWindowManager.java里面的修改 [java]  view plain copy
  1. --- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
  2. +++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
  3. @@ -2863,7 +2863,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {  
  4.      @Override  
  5.      public int adjustSystemUiVisibilityLw(int visibility) {  
  6. -        mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);  
  7. +       if(Settings.System.getInt(mContext.getContentResolver(),"factorytest.touch.mode",0) == 0){  
  8. +                mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);  
  9. +       }  
  10.          mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);  
  11.          // Reset any bits in mForceClearingStatusBarVisibility that  
Acitvity里面使用如下方式: [java]  view plain copy
  1. --- a/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java  
  2. +++ b/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java  
  3. @@ -32,6 +32,8 @@ import android.view.WindowManager;  
  4.  import java.util.ArrayList;  
  5.  import java.util.List;  
  6. +import android.provider.Settings;  
  7. +import android.app.StatusBarManager;  
  8.  public class TestTouchPanelLine2 extends Activity {  
  9.         private static final String TAG = "TestTouchPanelLine";  
  10. @@ -54,6 +56,7 @@ public class TestTouchPanelLine2 extends Activity {  
  11.         private static final int MSG_TEST_PANEL_NEXT_ITEM = 100;  
  12.         private static final int MSG_TEST_PANEL_START = 101;  
  13.         private static final int MSG_TEST_PANEL_STOP = 102;  
  14. +       private StatusBarManager mStatusBarManager;  
  15.         private Handler mInHandler = new Handler() {  
  16.                 @Override  
  17. @@ -94,6 +97,12 @@ public class TestTouchPanelLine2 extends Activity {  
  18.         @Override  
  19.         public void onCreate(Bundle savedInstanceState) {  
  20.                 super.onCreate(savedInstanceState);  
  21. @@ -141,8 +150,22 @@ public class TestTouchPanelLine2 extends Activity {  
  22.                                 .obtainMessage(FactoryTestMessage.MSG_OPEN_UI_OK);  
  23.                 msg.arg1 = (int) ID;  
  24.                 mOutHandler.sendMessage(msg);  
  25. +               mStatusBarManager = (StatusBarManager) this.getSystemService(Context.STATUS_BAR_SERVICE);  
  26. +               int state= StatusBarManager.DISABLE_EXPAND;  
  27. +                   state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;  
  28. +                   state |=  StatusBarManager.DISABLE_SYSTEM_INFO;  
  29. +               mStatusBarManager.disable(state);  
  30.         }  
  31. +           @Override  
  32. +           protected void onPause() {  
  33. +               int state =  StatusBarManager.DISABLE_NONE;  
  34. +               mStatusBarManager.disable(state);  
  35. +               super.onPause();  
  36. +           }  
  37.         @Override  
  38.         public boolean onKeyDown(int keyCode, KeyEvent event) {  
  39.                 // 是否触发按键为back键  
  以下是从MTK Online 上面找到的解决方案,保留备用。 Google从KK开始增加了状态栏透明以及全屏界面有通知可以下拉状态栏的设计,而这个设计出现的隐患是设置了FULL_SCREEN的界面是无法禁止状态栏下拉的,这样对一些工程测试app可能会造成一定的影响,但是以google默认的设计,应用端无法修改此设计来满足自己的需求。 MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏,如果贵司的代码还没有这部分逻辑,请参考如下: 1. frameworks\base\core\java\android\view\View.java
  [java]  view plain copy
  1.   public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000;  
  2. +    /** 
  3. +     * @hide 
  4. +     * 
  5. +     * NOTE: Flag for {@link #setSystemUiVisibility(int)}: It help user to disable transient 
  6. +     * status bar triggered by gesture 
  7. +     */  
  8. +    public static final int SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED = 0x00002000;  



2. frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
[java]  view plain copy
  1.  // monitor for system gestures  
  2.         mSystemGestures = new SystemGesturesPointerEventListener(context,  
  3.                 new SystemGesturesPointerEventListener.Callbacks() {  
  4.                     @Override  
  5.                     public void onSwipeFromTop() {  
  6. +                        if (isGestureIsolated())  
  7. +                            return;  
  8.                         if (mStatusBar != null) {  
  9.                             requestTransientBars(mStatusBar);  
  10.                         }  
  11.                     }  
  12.                     @Override  
  13.                     public void onSwipeFromBottom() {  
  14. +                        if (isGestureIsolated())  
  15. +                            return;  
  16.                         if (mNavigationBar != null && mNavigationBarOnBottom) {  
  17.                             requestTransientBars(mNavigationBar);  
  18.                         }  
  19.                     }  
  20.                     @Override  
  21.                     public void onSwipeFromRight() {  
  22. +                        if (isGestureIsolated())  
  23. +                            return;                     
  24.                         if (mNavigationBar != null && !mNavigationBarOnBottom) {  
  25.                             requestTransientBars(mNavigationBar);  
  26.                         }  
  27.                     }  
  28.                     @Override  
  29.                     public void onDebug() {  
  30.                         // no-op  
  31.                     }  
  32. +                    private boolean isGestureIsolated() {  
  33. +                        WindowState win = mFocusedWindow != null ? mFocusedWindow : mTopFullscreenOpaqueWindowState;  
  34. +                        if (win != null && (win.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED) != 0)  
  35. +                            return true;  
  36. +                        else  
  37. +                            return false;  
  38. +                    }  
  39.                 });  



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

更多相关文章

  1. 【Android开发】android最全的颜色对应的16进制代码(androidUI设
  2. Android(安卓)高工面试必考题(二):Android的事件分发机制设计与实现
  3. 【Android(安卓)UI设计与开发】第06期:底部菜单栏(一)使用TabActivi
  4. Android(安卓)Market中产品图标设计原则
  5. android 修改AVD的存放位置
  6. 高焕堂:iPhone软件是芝麻,巧用Android才能赚大钱
  7. 【Android(安卓)设计】:启航_ UI概览
  8. Android内存阀值修改--内存回收机制配置
  9. 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)

随机推荐

  1. Android(安卓)APP自动更新
  2. android Textview加下划线
  3. Gradle for Android(安卓)第四篇( 构建变
  4. Android使用WebView加载网页及数据__2020
  5. 2017年Android开源项目及库汇总
  6. Android(安卓)显示系统分析
  7. java 服务平台鸿鹄社交娱乐直播平台源码i
  8. wx openLocation
  9. cordova + vue-cli构建跨平台应用
  10. Android(安卓)7.0及以上调用系统相机拍照