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

📅 2026/7/21 8:38:09
Android16 蓝牙打开时,状态栏显示蓝牙图标
说明本修改主要针对 Android 16API 36AOSP 源码中的 SystemUI 模块。项目内容适用版本Android 16API 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:androidhttp://schemas.android.com/apk/res/androidandroid:width17dpandroid:height17dpandroid:viewportWidth17.0android:viewportHeight17.0groupandroid:translateY0.5android:translateX0.5pathandroid:pathDataM8.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.63zandroid:fillColor#FFFFFF//group/vector2. 修改PhoneStatusBarPolicy.java路径frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java方法updateBluetooth()修改前privatefinalvoidupdateBluetooth(){inticonIdR.drawable.stat_sys_data_bluetooth_connected;StringcontentDescriptionmResources.getString(R.string.accessibility_quick_settings_bluetooth_on);booleanbluetoothVisiblefalse;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())){contentDescriptionmResources.getString(R.string.accessibility_bluetooth_connected);bluetoothVisiblemBluetooth.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;inticonIdR.drawable.stat_sys_data_bluetooth;StringcontentDescriptionmResources.getString(R.string.accessibility_quick_settings_bluetooth_on);booleanbluetoothVisiblefalse;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 openbluetoothVisiblemBluetooth.isBluetoothEnabled();if(mBluetooth.isBluetoothConnected()(mBluetooth.isBluetoothAudioActive()||!mBluetooth.isBluetoothAudioProfileOnly())){contentDescriptionmResources.getString(R.string.accessibility_bluetooth_connected);bluetoothVisiblemBluetooth.isBluetoothEnabled();// Create by yeruilai 2026-6-6 19:54:14 Display Bluetooth icon when openiconIdR.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; } }附图