Android 11.0 禁止系统界面下拉状态栏和通知栏 手机 平板 车载 TV 投影 通用

本文主要是介绍Android 11.0 禁止系统界面下拉状态栏和通知栏 手机 平板 车载 TV 投影 通用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、禁止systemUI下拉状态栏和通知栏的核心代码部分

framework/base/packages/apps/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
/framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/notification/NotificationStackScrollLayout.java

2、禁止systemUI下拉状态栏和通知栏,考虑需要在锁屏状态下,和未锁屏状态下

2.1 没有锁屏状态下通过
KeyguardViewMediator.java来在adjustStatusBarLocked()中通过设置StatusBarManager的flag
属性来设置禁用下拉状态栏,然后在开机以后就禁用下拉状态栏达到禁用的目的

framework/base/packages/apps/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
private void handleShow(Bundle options) {Trace.beginSection("KeyguardViewMediator#handleShow");final int currentUser = KeyguardUpdateMonitor.getCurrentUser();if (mLockPatternUtils.isSecure(currentUser)) {mLockPatternUtils.getDevicePolicyManager().reportKeyguardSecured(currentUser);}synchronized (KeyguardViewMediator.this) {if (!mSystemReady) {if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready.");return;} else {if (DEBUG) Log.d(TAG, "handleShow");}mHiding = false;mWakeAndUnlocking = false;setShowingLocked(true);mKeyguardViewControllerLazy.get().show(options);resetKeyguardDonePendingLocked();mHideAnimationRun = false;adjustStatusBarLocked();userActivity();mUpdateMonitor.setKeyguardGoingAway(false);mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(false);mShowKeyguardWakeLock.release();}private void adjustStatusBarLocked(boolean forceHideHomeRecentsButtons,
boolean forceClearFlags) {
if (mStatusBarManager == null) {
mStatusBarManager = (StatusBarManager)
mContext.getSystemService(Context.STATUS_BAR_SERVICE);
}if (mStatusBarManager == null) {
Log.w(TAG, "Could not get status bar manager");
} else {
// Disable aspects of the system/status/navigation bars that must not be re-enabled by
// windows that appear on top, ever
int flags = StatusBarManager.DISABLE_NONE;// TODO (b/155663717) After restart, status bar will not properly hide home button
//  unless disable is called to show un-hide it once first
if (forceClearFlags) {
mStatusBarManager.disable(flags);
}if (forceHideHomeRecentsButtons || isShowingAndNotOccluded()) {
if (!mShowHomeOverLockscreen || !mInGestureNavigationMode) {
flags |= StatusBarManager.DISABLE_HOME;
}
flags |= StatusBarManager.DISABLE_RECENT;
}if (DEBUG) {
Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mOccluded=" + mOccluded
+ " isSecure=" + isSecure() + " force=" + forceHideHomeRecentsButtons
+  " --> flags=0x" + Integer.toHexString(flags));
}mStatusBarManager.disable(flags);
}
}

在调用show 显示状态栏的时候,adjustStatusBarLocked() 可以设置 mStatusBarManager 的flag为StatusBarManager.DISABLE_EXPAND表示禁用下拉状态栏

@@ -2168,7 +2168,7 @@ public class KeyguardViewMediator extends SystemUI {+ " isSecure=" + isSecure() + " force=" + forceHideHomeRecentsButtons+  " --> flags=0x" + Integer.toHexString(flags));}
-
+            flags = StatusBarManager.DISABLE_EXPAND;mStatusBarManager.disable(flags);}}

2.2 StatusBar 中不显示通知信息的图片:

在锁屏通知栏中去掉显示通知的部分,达到禁用下拉状态栏的功能
主要实现如下:
framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java

@@ -159,7 +159,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueueif ((state1 & DISABLE_NOTIFICATION_ICONS) != 0) {hideNotificationIconArea(animate);} else {
-                showNotificationIconArea(animate);
+                //showNotificationIconArea(animate);
+                hideNotificationIconArea(animate);}}

2.3 锁屏是 禁止状态栏下拉
在锁屏状态下禁用下拉状态栏 通知界面NotificationPanelView.java 去掉下拉开展状态栏部分的功能

路径

framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -908,7 +908,7 @@ public class NotificationPanelView extends PanelView implementsif (!isFullyCollapsed()) {handleQsDown(event);}
-        if (!mQsExpandImmediate && mQsTracking) {
+        if (!mKeyguardShowing && !mQsExpandImmediate && mQsTracking) {onQsTouch(event);if (!mConflictingQsExpansionGesture) {return true;
@@ -1114,6 +1114,9 @@ public class NotificationPanelView extends PanelView implements}private void setQsExpanded(boolean expanded) {
+        if (mKeyguardShowing) {
+            return;
+        }boolean changed = mQsExpanded != expanded;if (changed) {mQsExpanded = expanded;
@@ -1508,7 +1511,7 @@ public class NotificationPanelView extends PanelView implementsif (!mQsExpansionEnabled || mCollapsedOnDown) {return false;}
-        View header = mKeyguardShowing ? mKeyguardStatusBar : mQs.getHeader();
+        View header = /*mKeyguardShowing ? mKeyguardStatusBar :*/ mQs.getHeader();final boolean onHeader = x >= mQsFrame.getX()&& x <= mQsFrame.getX() + mQsFrame.getWidth()&& y >= header.getTop() && y <= header.getBottom();

2.4 锁屏状态隐藏通知栏的显示
禁止显示通知栏

/framework/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/notification/NotificationStackScrollLayout.java
@@ -717,7 +717,8 @@ public class NotificationStackScrollLayout extends ViewGroup}private void setMaxLayoutHeight(int maxLayoutHeight) {
-        mMaxLayoutHeight = maxLayoutHeight;
+        //mMaxLayoutHeight = maxLayoutHeight;
+        mMaxLayoutHeight = 0;mShelf.setMaxLayoutHeight(maxLayoutHeight);updateAlgorithmHeightAndPadding();}
@@ -2590,9 +2591,10 @@ public class NotificationStackScrollLayout extends ViewGroup} else {mTopPaddingOverflow = 0;}
-        setTopPadding(ignoreIntrinsicPadding ? topPadding : clampPadding(topPadding),
-                animate);
-        setExpandedHeight(mExpandedHeight);
+        //setTopPadding(ignoreIntrinsicPadding ? topPadding : clampPadding(topPadding),
+        //        animate);
+        //setExpandedHeight(mExpandedHeight);
+        setTopPadding(-500,animate);}

这篇关于Android 11.0 禁止系统界面下拉状态栏和通知栏 手机 平板 车载 TV 投影 通用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768166

相关文章

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l