Android 13 SystemUI 屏蔽导航栏;屏蔽锁屏;隐藏状态栏;禁止状态栏下拉;屏蔽Camera绿色图标;屏蔽原生音量条;屏蔽原生亮度条。

本文详细介绍了如何在Android13手机和平板上通过修改系统源码实现导航栏、锁屏功能的屏蔽,以及隐藏状态栏、禁止状态栏下拉、屏蔽相机绿色图标和原生音量/亮度条的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:本文给出Android 13 手机/平板原生SystemUI 一些实用的屏蔽补丁。

1、屏蔽导航栏

  导航栏屏蔽很简单,直接把创建导航栏的代码屏蔽即可。

代码路径:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\CentralSurfacesImpl.java
    // ================================================================================
    // Constructing the view
    // ================================================================================
    protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) {
    	. . . . . .
    	. . . . . .
    	. . . . . .
    	//createNavigationBar(result);//注释这行代码即可
    	. . . . . .
    	. . . . . .
    	. . . . . .

	}

2、屏蔽锁屏

diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index 99b15db780..e68bc2f410 100644
--- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -82,7 +82,7 @@
     <integer name="def_max_sound_trigger_detection_service_ops_per_day" translatable="false">1000</integer>
     <integer name="def_sound_trigger_detection_service_op_timeout" translatable="false">15000</integer>
 
-    <bool name="def_lockscreen_disabled">false</bool>
+    <bool name="def_lockscreen_disabled">true</bool>
     <bool name="def_device_provisioned">false</bool>
     <integer name="def_dock_audio_media_enabled">1</integer>
 
diff --git a/packages/apps/Settings/res/xml/security_settings_picker.xml b/packages/apps/Settings/res/xml/security_settings_picker.xml
index aed702983c..1c4ee9854e 100644
--- a/packages/apps/Settings/res/xml/security_settings_picker.xml
+++ b/packages/apps/Settings/res/xml/security_settings_picker.xml
@@ -24,7 +24,7 @@
             android:icon="@drawable/ic_lock_none"
             android:persistent="false"/>
 
-    <com.android.settingslib.RestrictedPreference
+    <!-- <com.android.settingslib.RestrictedPreference
             android:key="unlock_set_none"
             android:title="@string/unlock_set_unlock_none_title"
             android:icon="@drawable/ic_lock_swipe"
@@ -70,6 +70,6 @@
     <com.android.settingslib.widget.FooterPreference
             android:key="lock_settings_footer"
             android:selectable="false"
-            settings:searchable="false"/>
+            settings:searchable="false"/> -->
 
 </PreferenceScreen>
diff --git a/packages/apps/Settings/src/com/android/settings/password/ChooseLockGeneric.java b/packages/apps/Settings/src/com/android/settings/password/ChooseLockGeneric.java
index 8a4e9bb6c1..a1ca5340e3 100644
--- a/packages/apps/Settings/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/packages/apps/Settings/src/com/android/settings/password/ChooseLockGeneric.java
@@ -656,11 +656,11 @@ public class ChooseLockGeneric extends SettingsActivity {
 
             // Used for testing purposes
             findPreference(ScreenLockType.NONE.preferenceKey).setViewId(R.id.lock_none);
-            findPreference(KEY_SKIP_FINGERPRINT).setViewId(R.id.lock_none);
-            findPreference(KEY_SKIP_FACE).setViewId(R.id.lock_none);
-            findPreference(KEY_SKIP_BIOMETRICS).setViewId(R.id.lock_none);
-            findPreference(ScreenLockType.PIN.preferenceKey).setViewId(R.id.lock_pin);
-            findPreference(ScreenLockType.PASSWORD.preferenceKey).setViewId(R.id.lock_password);
+            // findPreference(KEY_SKIP_FINGERPRINT).setViewId(R.id.lock_none); //xuhao add 
+            // findPreference(KEY_SKIP_FACE).setViewId(R.id.lock_none);
+            // findPreference(KEY_SKIP_BIOMETRICS).setViewId(R.id.lock_none);
+            // findPreference(ScreenLockType.PIN.preferenceKey).setViewId(R.id.lock_pin);
+            // findPreference(ScreenLockType.PASSWORD.preferenceKey).setViewId(R.id.lock_password);
         }
 
         private String getFooterString() {
@@ -686,30 +686,30 @@ public class ChooseLockGeneric extends SettingsActivity {
 
         private void updatePreferenceText() {
             if (mForFingerprint) {
-                setPreferenceTitle(ScreenLockType.PATTERN,
-                        R.string.fingerprint_unlock_set_unlock_pattern);
-                setPreferenceTitle(ScreenLockType.PIN, R.string.fingerprint_unlock_set_unlock_pin);
-                setPreferenceTitle(ScreenLockType.PASSWORD,
-                        R.string.fingerprint_unlock_set_unlock_password);
+                // setPreferenceTitle(ScreenLockType.PATTERN,
+                //         R.string.fingerprint_unlock_set_unlock_pattern);
+                // setPreferenceTitle(ScreenLockType.PIN, R.string.fingerprint_unlock_set_unlock_pin);
+                // setPreferenceTitle(ScreenLockType.PASSWORD,
+                //         R.string.fingerprint_unlock_set_unlock_password);
             } else if (mForFace) {
-                setPreferenceTitle(ScreenLockType.PATTERN,
-                        R.string.face_unlock_set_unlock_pattern);
-                setPreferenceTitle(ScreenLockType.PIN, R.string.face_unlock_set_unlock_pin);
-                setPreferenceTitle(ScreenLockType.PASSWORD,
-                        R.string.face_unlock_set_unlock_password);
+                // setPreferenceTitle(ScreenLockType.PATTERN,
+                //         R.string.face_unlock_set_unlock_pattern);
+                // setPreferenceTitle(ScreenLockType.PIN, R.string.face_unlock_set_unlock_pin);
+                // setPreferenceTitle(ScreenLockType.PASSWORD,
+                //         R.string.face_unlock_set_unlock_password);
             } else if (mForBiometrics) {
-                setPreferenceTitle(ScreenLockType.PATTERN,
-                        R.string.biometrics_unlock_set_unlock_pattern);
-                setPreferenceTitle(ScreenLockType.PIN, R.string.biometrics_unlock_set_unlock_pin);
-                setPreferenceTitle(ScreenLockType.PASSWORD,
-                        R.string.biometrics_unlock_set_unlock_password);
+                // setPreferenceTitle(ScreenLockType.PATTERN,
+                //         R.string.biometrics_unlock_set_unlock_pattern);
+                // setPreferenceTitle(ScreenLockType.PIN, R.string.biometrics_unlock_set_unlock_pin);
+                // setPreferenceTitle(ScreenLockType.PASSWORD,
+                //         R.string.biometrics_unlock_set_unlock_password);
             }
 
             if (mManagedPasswordProvider.isSettingManagedPasswordSupported()) {
-                setPreferenceTitle(ScreenLockType.MANAGED,
-                        mManagedPasswordProvider.getPickerOptionTitle(mForFingerprint));
+                // setPreferenceTitle(ScreenLockType.MANAGED,
+                //         mManagedPasswordProvider.getPickerOptionTitle(mForFingerprint));
             } else {
-                removePreference(ScreenLockType.MANAGED.preferenceKey);
+                //removePreference(ScreenLockType.MANAGED.preferenceKey);
             }
 
             if (!(mForFingerprint && mIsSetNewPassword)) {

3、隐藏状态栏

在这里插入图片描述

4、禁止状态栏下拉

  解锁之后禁止状态栏下拉显示快捷通知、快捷设置。
在这里插入图片描述

5、屏蔽Camera绿色图标

  Android 13 使用摄像头时右上角会有绿色图标,屏蔽方法如下:
在这里插入图片描述
在这里插入图片描述

6、屏蔽原生音量条

frameworks\base\packages\SystemUI\src\com\android\systemui\volume\VolumeDialogImpl.java
在这里插入图片描述

在这里插入图片描述

7、屏蔽原生亮度条

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 实现 Android 12 中隐藏或禁用 SystemUI 导航栏 #### 方法一:通过修改 `dimens.xml` 文件调整导航栏尺寸 为了使底部导航栏几乎不可见,可以将导航栏的高度设置为极小值。具体操作涉及两个文件: - **路径**: `vendor\mediatek\proprietary\packages\apps\SystemUI\res\values\dimens.xml` - **路径**: `frameworks\base\packages\overlays\NavigationBarModeGesturalOverlay\res\values\dimens.xml` 在这两个位置中查找 `<dimen name="navigation_bar_height">...</dimen>` 并将其数值设为接近于零的值,例如 `1dp` 或更小[^3]。 ```xml <dimen name="navigation_bar_height">1dp</dimen> ``` 此方法不会完全移除导航栏而是使其变得非常细小以至于难以察觉。 #### 方法二:自定义手势处理逻辑以替代传统导航栏行为 另一种方式是在不改变外观的情况下重新定义交互模式,在 `NavigationHandle.java` 类内实现特定的手势响应机制,从而绕过标准的触摸输入到导航按键映射过程: - **路径**: `\vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\navigationbar\gestural\NavigationHandle.java` 这种方法允许开发者创建全新的用户体验而不必依赖原有的物理或虚拟按钮布局。 #### 方法三:利用 ADB 命令临时关闭导航栏显示 对于测试目的或是不需要永久更改的情况,可以通过命令行工具快速启用/停用导航栏: ```bash adb shell settings put global policy_control immersive.full=* ``` 上述指令会使得应用程序进入沉浸模式,此时顶部状态栏连同底部导航栏都会被隐藏起来直到用户做出相应动作触发其显现[^1]. #### 方法四:编程接口控制 如果应用具有足够的权限,则可以直接调用 API 来影响当前 Activity 的全展示属性: ```java // Java code snippet to hide navigation bar programmatically within an app context. View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions); ``` 这段代码片段展示了如何在一个活动(Activity)内部使用系统 UI 可视性标志来暂时隐藏导航栏并保持这种状态直至发生中断事件[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏苏码不动了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值