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

附上我修改的方法:PhoneWindowManager.java里面的修改
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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 在CODE上查看代码片 派生到我的代码片
  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 在CODE上查看代码片 派生到我的代码片
  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 在CODE上查看代码片 派生到我的代码片
  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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值