当前位置: 首页 > news >正文

Android16 蓝牙打开时,状态栏显示蓝牙图标

说明

本修改主要针对 Android 16(API 36)AOSP 源码中的 SystemUI 模块。

项目内容
适用版本Android 16(API 36)
涉及模块frameworks/base/packages/SystemUI
修改类PhoneStatusBarPolicy
修改方法updateBluetooth()

在 Android 16 原生 SystemUI 中,PhoneStatusBarPolicy.updateBluetooth()默认仅在蓝牙已连接且满足音频 Profile 条件时才显示状态栏图标。用户仅打开蓝牙开关、尚未连接设备时,状态栏不会出现蓝牙图标,与快捷设置中蓝牙已开启的状态不一致。

本次修改在 Android 16 上实现:

  • 蓝牙开启即显示stat_sys_data_bluetooth图标(新增资源)
  • 蓝牙已连接时切换为stat_sys_data_bluetooth_connected图标
  • 蓝牙关闭时隐藏图标

若移植到其他 Android 版本,需确认对应分支中PhoneStatusBarPolicy.java路径及updateBluetooth()实现是否一致,资源命名是否相同。


修改文件

frameworks/base/packages/SystemUI/res/drawable/stat_sys_data_bluetooth.xml (新增) frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java (修改)

1. 新增stat_sys_data_bluetooth.xml

路径:frameworks/base/packages/SystemUI/res/drawable/stat_sys_data_bluetooth.xml

<!-- Copyright (C) 2017 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --><vectorxmlns:android="http://schemas.android.com/apk/res/android"android:width="17dp"android:height="17dp"android:viewportWidth="17.0"android:viewportHeight="17.0"><groupandroid:translateY="0.5"android:translateX="0.5"><pathandroid:pathData="M8.84,8l2.62,-2.62c0.29,-0.29 0.29,-0.75 0,-1.04L8.33,1.22L8.31,1.2c-0.3,-0.28 -0.76,-0.26 -1.03,0.04c-0.13,0.13 -0.2,0.31 -0.2,0.5v4.51L4.24,3.4c-0.29,-0.29 -0.74,-0.29 -1.03,0s-0.29,0.74 0,1.03L6.78,8l-3.56,3.56c-0.29,0.29 -0.29,0.74 0,1.03s0.74,0.29 1.03,0l2.83,-2.83v4.51c0,0.4 0.33,0.73 0.73,0.73c0.18,0 0.36,-0.07 0.5,-0.2l0.03,-0.03l3.12,-3.12c0.29,-0.29 0.29,-0.75 0,-1.04L8.84,8zM8.47,6.37V3.36l1.5,1.5L8.47,6.37zM8.47,12.63V9.62l1.5,1.5L8.47,12.63z"android:fillColor="#FFFFFF"/></group></vector>

2. 修改PhoneStatusBarPolicy.java

路径:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java

方法:updateBluetooth()

修改前

privatefinalvoidupdateBluetooth(){inticonId=R.drawable.stat_sys_data_bluetooth_connected;StringcontentDescription=mResources.getString(R.string.accessibility_quick_settings_bluetooth_on);booleanbluetoothVisible=false;if(mBluetooth!=null){// Bug 2687381, The Bluetooth icon is not displayed normally.Log.d(TAG,"updateBluetooth(), mIsActive:"+mBluetooth.isBluetoothAudioActive());if(mBluetooth.isBluetoothConnected()&&(mBluetooth.isBluetoothAudioActive()||!mBluetooth.isBluetoothAudioProfileOnly())){contentDescription=mResources.getString(R.string.accessibility_bluetooth_connected);bluetoothVisible=mBluetooth.isBluetoothEnabled();}}// ...}

修改后

privatefinalvoidupdateBluetooth(){// Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when open// int iconId = R.drawable.stat_sys_data_bluetooth_connected;inticonId=R.drawable.stat_sys_data_bluetooth;StringcontentDescription=mResources.getString(R.string.accessibility_quick_settings_bluetooth_on);booleanbluetoothVisible=false;if(mBluetooth!=null){// Bug 2687381, The Bluetooth icon is not displayed normally.Log.d(TAG,"updateBluetooth(), mIsActive:"+mBluetooth.isBluetoothAudioActive());// Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when openbluetoothVisible=mBluetooth.isBluetoothEnabled();if(mBluetooth.isBluetoothConnected()&&(mBluetooth.isBluetoothAudioActive()||!mBluetooth.isBluetoothAudioProfileOnly())){contentDescription=mResources.getString(R.string.accessibility_bluetooth_connected);bluetoothVisible=mBluetooth.isBluetoothEnabled();// Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when openiconId=R.drawable.stat_sys_data_bluetooth_connected;}}// ...}

修改点

private final void updateBluetooth() { - int iconId = R.drawable.stat_sys_data_bluetooth_connected; + // Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when open + // int iconId = R.drawable.stat_sys_data_bluetooth_connected; + int iconId = R.drawable.stat_sys_data_bluetooth; String contentDescription = mResources.getString(R.string.accessibility_quick_settings_bluetooth_on); boolean bluetoothVisible = false; if (mBluetooth != null) { // Bug 2687381, The Bluetooth icon is not displayed normally. Log.d(TAG, "updateBluetooth(), mIsActive:" + mBluetooth.isBluetoothAudioActive()); + // Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when open + bluetoothVisible = mBluetooth.isBluetoothEnabled(); if (mBluetooth.isBluetoothConnected() && (mBluetooth.isBluetoothAudioActive() || !mBluetooth.isBluetoothAudioProfileOnly())) { contentDescription = mResources.getString( R.string.accessibility_bluetooth_connected); bluetoothVisible = mBluetooth.isBluetoothEnabled(); + // Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when open + iconId = R.drawable.stat_sys_data_bluetooth_connected; } }

附图

http://www.cnnetsun.cn/news/3555507.html

相关文章:

  • Grok CLI重大更新前瞻:AI命令行工具部署与代码生成实践
  • C2000 HRCAP高分辨率捕获模块:从校准到实战的精密时间测量指南
  • 深入解析TI EVE内存架构:DMEM、WBUF、IBUF与程序缓存协同设计
  • YOLOv11室内办公环境绝缘手套目标检测数据集
  • 深入解析C2000 DSP Bootloader:从启动模式到数据流协议实战
  • 具身智能的TVA-VLA双引擎架构(系列)
  • HarmonyOS7 基础单选项:用 Radio 做好单项选择
  • 计算机毕业设计之net法院庭审辅助系统的研究与发现
  • HarmonyOS7 单选状态控制器:用 checked 做好状态控制
  • Windows 11免费升级策略与微软生态布局解析
  • Unity热修复实战:InjectFix框架原理与5步修复线上Bug
  • YARP网关统一管理CORS跨域配置实战
  • 国内网络环境下Harness CI/CD优化实践
  • Chet.Admin 模块详解⑤:部门树形管理与组织架构
  • LINUX——第一部分 Linux是什么与如何学习【第1章】
  • LangChain框架:构建大语言模型应用的开源利器
  • Django学生图书管理系统:从零到部署的完整项目实战
  • 基于STM32单片机直流电机控制加减速正反转控制系统设计DIY-T017
  • Java面试与实战能力割裂:如何识别影帝型候选人与培养实干工程师
  • 基于STM32单片机生理监控人体肺活量测试仪系统设计DIY-T101
  • 基于STM32单片机温控风扇温度采集PWM调速无线视频监控/WiFi/蓝牙APP设计DIY-T083
  • XUnity Auto Translator:5分钟掌握Unity游戏自动翻译的终极指南
  • SAP GUI 登录界面信息设置详解
  • 华为云 Skills 库 —— 让 AI 自然语言操控云基础设施
  • 【苍穹外卖 Day12| Excel 入门】
  • C++多态实战:用组装电脑案例理解虚函数与接口设计
  • Agent-Reach 完全指南:用 CLI 一键给 AI Agent 接入 15 个互联网平台
  • Unity新输入系统实战:从事件驱动到跨平台输入架构设计
  • 多模态AI模型:技术突破与产业应用全景
  • 文件上传下载“卡脖子”还爆内存?Spring Boot 云存储传输优化全链路指南