参考下拉栏的屏幕亮度调节,添加媒体音量调节。
平台信息:
MSM8909.LA.3.1.2_AOSP
PLATFORM_VERSION=9
BUILD_ID=PKQ1.190903.001

效果图

在这里插入图片描述

布局文件与音量图标

Index: frameworks/base/packages/SystemUI/res/layout/quick_settings_media_volume_dialog.xml
===================================================================
--- frameworks/base/packages/SystemUI/res/layout/quick_settings_media_volume_dialog.xml	(不存在的)
+++ frameworks/base/packages/SystemUI/res/layout/quick_settings_media_volume_dialog.xml	(版本 12429)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res-auto"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:layout_gravity="center_vertical"
+    android:paddingLeft="16dp"
+    android:paddingRight="16dp">
+
+    <ImageView
+        android:id="@+id/media_volume_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginEnd="8dp"
+        android:src="@drawable/ic_media_stream"
+        android:contentDescription="@null"
+        android:visibility="visible" />
+
+    <SeekBar
+        android:id="@+id/media_volume_seekbar"
+        android:layout_width="0dp"
+        android:layout_height="48dp"
+        android:layout_gravity="center_vertical"
+        android:layout_weight="1" />
+
+</LinearLayout>
Index: frameworks/base/packages/SystemUI/res/drawable/ic_media_stream.xml
===================================================================
--- frameworks/base/packages/SystemUI/res/drawable/ic_media_stream.xml	(不存在的)
+++ frameworks/base/packages/SystemUI/res/drawable/ic_media_stream.xml	(版本 12429)
@@ -0,0 +1,25 @@
+<!--
+    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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,3l0.01,10.55c-0.59,-0.34 -1.27,-0.55 -2,-0.55C7.79,13 6,14.79 6,17c0,2.21 1.79,4 4.01,4S14,19.21 14,17V7h4V3H12zM10.01,19c-1.1,0 -2,-0.9 -2,-2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2C12.01,18.1 11.11,19 10.01,19z"/>
+</vector>

实现

Index: frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
===================================================================
--- frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java	(版本 12424)
+++ frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java	(版本 12429)
@@ -20,10 +20,14 @@import static com.android.systemui.qs.tileimpl.QSTileImpl.getColorForState;import android.annotation.Nullable;
+import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;import android.content.res.Configuration;import android.content.res.Resources;
+import android.media.AudioManager;import android.metrics.LogMaker;import android.os.Handler;import android.os.Message;
@@ -32,6 +36,8 @@import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;import com.android.internal.logging.MetricsLogger;import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -62,7 +68,7 @@protected final Context mContext;protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
-    protected final View mBrightnessView;
+    protected final View mBrightnessView, mMediaVolumeView;private final H mHandler = new H();private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);private final QSTileRevealController mQsTileRevealController;
@@ -87,6 +93,9 @@private BrightnessMirrorController mBrightnessMirrorController;private View mDivider;+    private AudioManager mAudioManager;
+    private SeekBar mMediaVolumeSeekBar;
+public QSPanel(Context context) {this(context, null);}
@@ -101,6 +110,12 @@R.layout.quick_settings_brightness_dialog, this, false);addView(mBrightnessView);+        mMediaVolumeView = LayoutInflater.from(mContext).inflate(
+            R.layout.quick_settings_media_volume_dialog, this, false);
+        addView(mMediaVolumeView);
+mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate(R.layout.qs_paged_tile_layout, this, false);mTileLayout.setListening(mListening);
@@ -123,9 +138,42 @@findViewById(R.id.brightness_icon),findViewById(R.id.brightness_slider));+        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        mMediaVolumeSeekBar = findViewById(R.id.media_volume_seekbar);
+        mMediaVolumeSeekBar.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
+        mMediaVolumeSeekBar.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
+        mMediaVolumeSeekBar.setOnSeekBarChangeListener(mSeekListener);
+        IntentFilter filter = new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION);
+        mContext.registerReceiver(mMediaVolumeReceiver, filter);
+updateResources();}+    private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
+        @Override
+        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
+        }
+
+        @Override
+        public void onStartTrackingTouch(SeekBar seekBar) { }
+
+        @Override
+        public void onStopTrackingTouch(SeekBar seekBar) { }
+    };
+
+    private final BroadcastReceiver mMediaVolumeReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            int currentMediaVolumeValue = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
+            mMediaVolumeSeekBar.setProgress(currentMediaVolumeValue);
+        }
+    };
+protected void addDivider() {mDivider = LayoutInflater.from(mContext).inflate(R.layout.qs_divider, this, false);mDivider.setBackgroundColor(Utils.applyAlpha(mDivider.getAlpha(),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85470.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85470.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Code 配置ROS2开发环境常见问题记录

1、ctrlshiftp后找不到C/C: Edit configurations 安装或重装C插件。 参考链接&#xff1a; 搜索C/C: Edit configurations显示no matching command问题https://www.cnblogs.com/hunghau/p/17195622.html 2、ROS2 API无法转到定义 &#xff08;1&#xff09;在c_cpp_proper…

Docker Desktop搭建RocketMQ的完整教程

Docker Desktop搭建RocketMQ图文教程 1. 准备工作 已安装Docker Desktop&#xff08;本地安装方法参考上一节教程&#xff09;。需部署三个组件&#xff1a;NameServer、Broker、Console&#xff08;管理界面&#xff09;。 2. 创建目录和文件 在任意盘&#xff08;如D盘&am…

算法35天|1049. 最后一块石头的重量 II、 494. 目标和、 474.一和零

1049. 最后一块石头的重量 II 题目 思路与解法 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i0;i<stones.size();i){sum stones[i];}// 问题转换为&#xff1a;// 先求得&#xff0c;背包容量为target时&#x…

AWS S3拒绝非https的请求访问

问题 aws s3桶&#xff0c;安全要求必须强制使用ssl加密访问&#xff0c;即https。需要添加一个策略拒绝所有不是https的访问s3桶请求。 解决 在对于桶添加相关拒绝策略即可。如下&#xff1a; {"Version": "2012-10-17","Statement": [{&qu…

GitLab CVE-2025-4278 安全漏洞解决方案

本分分享极狐GitLab 补丁版本 18.0.2, 17.11.4, 17.10.8 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任…

Async、await是什么?跟promise有什么区别?使用的好处是什么

Async/Await 与 Promise 的深度解析 一、基本概念 1. Promise Promise 是 ES6 引入的异步编程解决方案&#xff0c;表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 function fetchData() {return new Promise((resolve, reject) > {setTimeout(…

MySQL数据库中所有表的空间占用与行数统计

查看某个数据库中所有表的空间与行数统计 SELECT TABLE_NAME AS 表名,TABLE_ROWS AS 行数,ROUND(DATA_LENGTH / 1024 / 1024, 2) AS 数据大小(MB),ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS 索引大小(MB),ROUND((DATA_LENGTH INDEX_LENGTH) / 1024 / 1024, 2) AS 总占用空间(…

el-upload 点击上传按钮前先判断条件满足再弹选择文件框

解决思路&#xff1a; 先写一个上传按钮&#xff0c;点击上传按钮后判断条件是否满足&#xff0c;满足则显示上传组件并使用ref来控制点击事件&#xff0c;隐藏自身。 注&#xff1a;上传成功或者上传失败时或者上传前判断条件添加不满足return将this.isShow true 代码部分…

django ReturnDict 如何修改内容

在Django中&#xff0c;QuerySet 对象通常用于从数据库中检索数据&#xff0c;并且可以被转换为各种格式&#xff0c;例如字典。如果你想修改QuerySet返回的结果&#xff08;例如&#xff0c;将其转换为dict&#xff09;&#xff0c;你可以在查询执行后进行操作。这里有几种常见…

密室出逃消消乐小游戏微信流量主小程序开源

这个密室出逃消消乐小游戏采用了微信小程序的标准目录结构&#xff0c;包含以下核心功能&#xff1a; 游戏界面&#xff1a;6x6 的网格布局&#xff0c;随机生成不同类型的物品 游戏逻辑&#xff1a;交换相邻物品&#xff0c;消除三个或以上相同类型的物品 计分系统&#xff1a…

SmartMediaKit实战经验总结之高稳定、低延迟、强兼容

在万物互联与数字化加速融合的今天&#xff0c;音视频实时通信技术正成为各行业发展的核心驱动力。从教育到工业、从安防到远程医疗&#xff0c;毫秒级低延迟的音视频交互体验已成为新一代实时系统的“生命线”。而在这个领域&#xff0c;视沃科技旗下的大牛直播SDK&#xff08…

前端性能调优工具与指标

性能指标解析 核心Web指标 核心Web指标(Core Web Vitals)是Google定义的一组关键性能指标&#xff0c;直接影响用户体验和SEO排名&#xff1a; FCP (First Contentful Paint): 首次内容绘制&#xff0c;记录页面首次渲染任何文本、图像、非白色画布或SVG的时间点 优: < 1.…

LeeCode2294划分数组使最大值为K

项目场景&#xff1a; 给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 &#xff0c;使 nums 中的每个元素都 恰好 出现在一个子序列中。 在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下&#xff0c;返回需要划分的 最少 子序列…

中国医科大借iMeta影响因子跃升至33.2(中科院1区)东风,凭多组学联合生信分析成果登刊

中国医科大借iMeta影响因子跃升至33.2&#xff08;中科院1区&#xff09;东风&#xff0c;凭多组学联合生信分析成果登刊 2025年6月18日&#xff0c;科睿唯安正式发布了2024年期刊的最新影响因子(发送关键词 “2024JIF” 至 “生信学术纵览”&#xff0c;即可下载完整版最新影…

百度垂搜数据管理系统弹性调度优化实践

百度垂直搜索系统将搜索核心能力赋能阿拉丁&#xff08;百度搜索特型结果&#xff09;、垂直领域搜索、应用内搜索等场景&#xff0c;支撑了数百个检索场景、百亿级内容数据的检索。随着接入业务数量和数据量不断增长&#xff0c;系统在海量数据管理与调度上遭遇新的挑战&#…

什么是Nacos?

Nacos&#xff08;Naming and Configuration Service&#xff09;是一个由阿里巴巴开源的动态服务发现、配置管理和服务管理平台&#xff0c;专为云原生应用设计。它是构建微服务架构的核心基础设施之一&#xff0c;主要解决分布式系统中的服务注册发现和动态配置管理两大核心问…

golang excel导出时需要显示刷新

"github.com/xuri/excelize/v2"包导出excel文件时在调用WriteTo函数前需要显式关闭流写入器 if err : sw.Flush(); err ! nil { return nil, err } &#xff0c;否则会造成excel文件使用excel打开时出现问题&#xff0c;但是用wps打开文件就没有此问题 详细代码&…

Make RL Great Again:大语言模型时代的强化学习推理丨记深度推理模型论坛

进入2025年&#xff0c;大模型依赖Scaling Law提升性能的方式正面临边际递减。一方面算力成本居高不下&#xff0c;另一方面训练效率与推理质量难以兼顾。在这种背景下&#xff0c;模型正悄然从“模仿机器”转向“思考引擎”。 6月7日&#xff0c;以“推理”为核心的智源大会深…

MATLAB R2025a安装教程

软件介绍 MATLAB 是由MathWorks公司开发的高级数值计算软件&#xff0c;在工程计算、数据分析和算法开发领域应用广泛&#xff0c;以下是其相关介绍&#xff1a; 功能特点 ・矩阵运算与可视化&#xff1a;提供强大的矩阵处理能力&#xff0c;内置丰富的绘图函数&#xff0c;可快…

Flink CDC MySQL 表字段定义为 decimal 输出乱码问题优雅解决方式

Flink CDC MySQL 表字段定义为 decimal 输出乱码问题解析 代码运行环境 Flink 1.15 + FlinkCDC 2.4.0 + jdk1.8 +springboot 2.31、原因分析 Flink CDC 底层使用 Debezium 连接器来捕获 MySQL 的数据变更。当 MySQL 表中的字段类型为 decimal 时,Debezium 默认会将 decimal…