SystemUI 怎样给应用提供禁止下拉状态栏接口?

不积跬步无以至千里

        在系统开发的时候常常会遇到某些场景是不让下拉状态栏的,因为上边会有一些控制开关,还有一些通知的跳转,这样就会规避到这个原则,比如开机向导中让你为了一些安全措施必须完成的某些步骤等等.

        在这里系统其实已经为你提供了一个Api接口了,如下:

    StatusBarManager mStatusBarManager = (StatusBarManager) context.getSystemService(Context.STATUS_BAR_SERVICE);

    // Disable statusbar pull-down

    mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);

          不过细心的童鞋点进Api中一看这个接口是@Hide的方法,因此对于一些三方的app是不让用的,这个方法好像反射也不行.那怎么办呢?咱们也不能把这个释放开啊,所以还是寻找其它解决办法.因此其实可以通过它控制的逻辑找出突破口.

          其实有兴趣的同学可以看一下我另一篇文章就是对这api的追踪代码,文章链接如下:

            https://blog.csdn.net/WDYShowTime/article/details/83782933

            其中文章有对这个disable的调用是通过StatusBarManagerService,然后其实根本的控制是想用户通过这个Manager然后通过这个disable等各种操作对SystemUI中的下拉的状态栏进行控制,所以看一下这个控制到SystemUI以后是在目录如下:

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

    /**

        * State is one or more of the DISABLE constants from StatusBarManager.

        */

        @Override

        public void disable(int state1, int state2, boolean animate) {

            animate &= mStatusBarWindowState != WINDOW_STATE_HIDDEN;

            mDisabledUnmodified1 = state1;

            mDisabledUnmodified2 = state2;

            final int old1 = mDisabled1;

            final int diff1 = state1 ^ old1;

            mDisabled1 = state1;

            ...

其中你设置的disable的传递给了mDisabled1这个int值了,其中你会发现其中状态栏的面板会通过在这,目录如下:

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java

    @Override

        public boolean onTouchEvent(MotionEvent event) {

            // Allow subclasses to implement enable/disable semantics

            if (!panelEnabled()) {

                if (event.getAction() == MotionEvent.ACTION_DOWN) {

                    Log.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)",

                            (int) event.getX(), (int) event.getY()));

                }

                return false;

            }

其实可以看出当panelEnabled这个不可用的时候就return false,这个PanelBar是状态栏的父View,这样面板的下拉就被"消费"了.

其实看一下这个panelEnabled()的逻辑就和上边对应起来了,其实这边panelEnabled最终也是调用的StatusBar中的panelEnabled方法,目录如下:

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

    public boolean panelsEnabled() {

            return (mDisabled1 & StatusBarManager.DISABLE_EXPAND) == 0 && !ONLY_CORE_APPS;

        }

因此,返回false的时候就拦截了,因此咱们这里可以通过某个值比如SystemProperties或者Settings.system中的数据库,或者某个应用的数据库等,咱们通过某个值来进行一个处理就行了,如下:

public boolean panelsEnabled() {

            //[add] start

            if (SystemProperties.getBoolean("persist.status.bar.enable", false)) {

                return false;

            }

            // end

            return (mDisabled1 & StatusBarManager.DISABLE_EXPAND) == 0 && !ONLY_CORE_APPS;

        }

具体的逻辑你可以怎么进行判断你都可以,false的时候就会进行拦截不能下拉了.

重要的事说两边,其中关于上边的api的调用流程文章URL: https://blog.csdn.net/WDYShowTime/article/details/83782933

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容