首页 > 其他分享 >Android系统开发 禁止状态栏下拉功能

Android系统开发 禁止状态栏下拉功能

时间:2024-01-17 13:23:59浏览次数:20  
标签:what 禁止 return 状态栏 int java Android true event

前言

  此博客讲解如何禁止状态栏下拉功能

禁止状态栏下拉功能

需要修改三个地方,分别是NotificationStackScrollLayout.java 、PhoneStatusBarView.java 、 StatusBarManager.java

不允许锁屏状态下拉状态栏

文件位置: frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java

    @ShadeViewRefactor(RefactorComponent.INPUT)
    private final DragDownCallback mDragDownCallback = new DragDownCallback() {

        /* Only ever called as a consequence of a lockscreen expansion gesture. */
        @Override
        public boolean onDraggedDown(View startingChild, int dragLengthY) {
            //添加这部分代码,这里在判断是否在锁屏状态,如果在锁屏就返回false,不执行下面的向下拖动的手势功能
            if (mStatusBarState == StatusBarState.KEYGUARD) {
                return false;
            }
            //----------
            if (mStatusBarState == StatusBarState.KEYGUARD
                    && hasActiveNotifications()) {
                mLockscreenGestureLogger.write(
                        MetricsEvent.ACTION_LS_SHADE,
                        (int) (dragLengthY / mDisplayMetrics.density),
                        0 /* velocityDp - N/A */);

                if (!mAmbientState.isDozing() || startingChild != null) {
                    // We have notifications, go to locked shade.
                    mShadeController.goToLockedShade(startingChild);
                    if (startingChild instanceof ExpandableNotificationRow) {
                        ExpandableNotificationRow row = (ExpandableNotificationRow) startingChild;
                        row.onExpandedByGesture(true /* drag down is always an open */);
                    }
                }

                return true;
            } else if (mDynamicPrivacyController.isInLockedDownShade()) {
                mStatusbarStateController.setLeaveOpenOnKeyguardHide(true);
                mStatusBar.dismissKeyguardThenExecute(() -> false /* dismissAction */,
                        null /* cancelRunnable */, false /* afterKeyguardGone */);
                return true;
            } else {
                // abort gesture.
                return false;
            }
        }
        //略.......

文件位置:frameworks/base/core/java/android/app/StatusBarManager.java

    /**
     * Disable some features in the status bar.  Pass the bitwise-or of the DISABLE_* flags.
     * To re-enable everything, pass {@link #DISABLE_NONE}.
     *
     * @hide
     */
    @UnsupportedAppUsage
    public void disable(int what) {
        //加上这行what = what | DISABLE_EXPAND;
        what = what | DISABLE_EXPAND;
        try {
            final int userId = Binder.getCallingUserHandle().getIdentifier();
            final IStatusBarService svc = getService();
            if (svc != null) {
                svc.disableForUser(what, mToken, mContext.getPackageName(), userId);
            }
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

文件位置:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean barConsumedEvent = mBar.interceptTouchEvent(event);

        if (DEBUG_GESTURES) {
            if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
                EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH,
                        event.getActionMasked(), (int) event.getX(), (int) event.getY(),
                        barConsumedEvent ? 1 : 0);
            }
        }

        // return barConsumedEvent || super.onTouchEvent(event);
        return true; //将上面的代码注释掉,这里直接返回true
    }

效果图

end

标签:what,禁止,return,状态栏,int,java,Android,true,event
From: https://www.cnblogs.com/guanxinjing/p/17969803

相关文章

  • Android12以上获取设备网络信号数据
    公司有很多物联网设备,关键的信号参数是RSRP,总有些地方信号差,不适合安装。所以让开发一款测信号的app,用于现场的同事在判定是否符合设备信号条件,再考虑安装设备。由于与开发过程中使用的是Androidsdk33,版本太高,网上搜到的很多旧的方法已经弃用,用起来也比较麻烦。自己捣鼓了半天......
  • Android gradle dependency tree change(依赖树变化)监控实现,sdk version 变化一目了然
    @目录前言基本原理执行流程diff报告不同分支merge过来的diff报告同个分支产生的merge报告同个分支提交的diff报告具体实现原理我们需要监控怎样的Dendenpency变化怎样获取dependencyTreeproject.configurations方式./gradlewdependenciesAsciiDependencyReportRe......
  • Android Studio可以用copilot么
    使用Copilot在AndroidStudio中开发引言AndroidStudio是开发Android应用程序的首选IDE。它提供了丰富的开发工具和功能,可以大大提高开发效率。而Copilot则是GitHub的一个代码自动补全工具,它能够基于大量开源代码的学习,推荐出高质量的代码片段,帮助开发者更快地完成编码任务。本文......
  • Androidstudio copilot 安装
    如何安装AndroidStudioCopilot1.安装AndroidStudio首先,你需要安装AndroidStudio,这是一个用于开发Android应用程序的集成开发环境(IDE)。你可以从官方网站(Studio,并按照安装向导的指示进行安装。2.配置AndroidStudio安装完成后,你需要对AndroidStudio进行一些基本配置。打......
  • android stuio使用copilot
    AndroidStudio使用Copilot作为一名经验丰富的开发者,我将教你如何使用Copilot来提高在AndroidStudio中的开发效率。以下是整个流程的步骤:flowchartTDA[安装Copilot插件]-->B[使用快捷键]B-->C[代码自动补全]C-->D[编写代码]D-->E[自动完成]步骤1......
  • android studio github copilot chat
    实现AndroidStudioGithubCopilotChat简介在本文中,我将向你介绍如何在AndroidStudio中使用GithubCopilotChat插件。GithubCopilotChat是一款基于人工智能的代码助手,可以帮助开发者更高效地编写代码,并提供实时的代码建议和补全功能。流程图flowchartTDA[准......
  • Androidstudio如何使用Copilot
    AndroidStudio如何使用Copilot引言AndroidStudio是一款功能强大的集成开发环境(IDE),提供了丰富的工具和功能来帮助开发者创建和调试Android应用程序。Copilot是GitHub开发的人工智能代码助手,可以为开发者提供代码自动补全和提示。本文将介绍如何在AndroidStudio中使用Copilot,以......
  • copilot可以写android代码么
    Copilot可以写Android代码吗?Copilot是GitHub最新推出的AI合作者,它使用先进的机器学习模型来辅助开发人员编写代码。但是,很多人对于Copilot是否可以写Android代码还存在疑问。在本文中,我们将探讨Copilot在Android开发中的应用,并给出代码示例来展示其功能。Copilot简介Copilot是由......
  • Win11上安装repo以能够使用`repo sync`同步Android代码
    首先安装一个git然后获取安卓源码,参考https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/下载地址为https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar解压tar文档,由于安卓代码逐渐使用python3脚本替代python2,而git-repo稳定版已不支持使用于Android源码......
  • android studio 搜索不到GitHub Copilot
    如何在AndroidStudio中搜索到GitHubCopilot1.概述在本文中,我将向你介绍如何在AndroidStudio中搜索到GitHubCopilot。GitHubCopilot是一个基于机器学习的代码助手,它可以根据上下文为你提供代码建议和完成。为了使用GitHubCopilot,你需要在AndroidStudio中安装并配置它。下......