Android 设置音量默认值

        在车机 Audio 开发中,有很多场景需要设置音量的最大值和最小值问题,例如通话模式通常是禁止静音的,耳机模式调整到较大音量时开机后会恢复一个最大默认值等问题。而且通常情况下不通车型的默认值可能会不同,这篇文章就来看一下如何在一套代码中维护不同车型的默认音量。

一、原生设置

        我们先来看一下如果只需要一套代码的时候,该如何保存和使用这些默认值。

1、配置默认值

        通常情况下,需要在上面的文件中添加相关默认值属性。

config.xml

源码位置:/packages/services/Car/service/res/values/config.xml

<integer name="mediaMaxVolume">20</integer>
<integer name="mediaMinVolume">5</integer>
<integer name="alarmMaxVolume">20</integer>
<integer name="alarmMinVolume">5</integer>

        这里设置了多媒体的最大音量为 20,最小音量为 10。设置了闹钟的最小音量为 5。

2、初始化数据

CarAudioService

源码位置:/packages/services/Car/service/src/com/android/car/CarAudioService.java

public class CarAudioService extends ICarAudio.Stub implements CarServiceBase, PowerEventProcessingHandler {……private static final String MEDIA_MIN_VOLUME  = "vendor.media.min.volume";private static final String MEDIA_MAX_VOLUME  = "vendor.media.max.volume";private static final String ALARM_MIN_VOLUME  = "vendor.alarm.min.volume";private static final String ALARM_MAX_VOLUME  = "vendor.alarm.max.volume";private int mMediaMinVolume;private int mMediaMaxVolume;private int mAlarmMinVolume;private int mAlarmMaxVolume;@Overridepublic void init() {……synchronized (mImplLock) {……Resources res = mContext.getResources();mMediaMinVolume = res.getInteger(R.integer.mediaMinVolume);mMediaMaxVolume = res.getInteger(R.integer.mediaMaxVolume);mAlarmMinVolume = res.getInteger(R.integer.alarmMinVolume);mAlarmMaxVolume = res.getInteger(R.integer.alarmMaxVolume);SystemProperties.set(MEDIA_MIN_VOLUME, String.valueOf(mMediaMinVolume));SystemProperties.set(MEDIA_MAX_VOLUME, String.valueOf(mMediaMaxVolume));SystemProperties.set(ALARM_MIN_VOLUME, String.valueOf(mAlarmMinVolume));SystemProperties.set(ALARM_MAX_VOLUME, String.valueOf(mAlarmMaxVolume));……}……}……
}

        这里就是取出 xml 中的数据,存储到系统变量中,我们这里看一下存储方式。

SystemProperties

源码位置:/frameworks/base/core/java/android/os/SystemProperties.java

/*** 提供对系统属性存储的访问权限。系统属性存储包含字符串键值对列表。* 该类仅用于本地的系统属性。*/
public class SystemProperties {private static final boolean TRACK_KEY_ACCESS = false;public static String get(@NonNull String key) {if (TRACK_KEY_ACCESS) onKeyAccess(key);return native_get(key);}public static String get(@NonNull String key, @Nullable String def) {if (TRACK_KEY_ACCESS) onKeyAccess(key);return native_get(key, def);}
}

        可以看到这就相当于一个用于存储系统属性的工具类。

3、获取数据

        在需要的位置获取上面存储的数据来使用。

private static final String MEDIA_MIN_VOLUME  = "vendor.media.min.volume";
private static final String MEDIA_MAX_VOLUME  = "vendor.media.max.volume";
private static final String ALARM_MIN_VOLUME  = "vendor.alarm.min.volume";
private static final String ALARM_MAX_VOLUME  = "vendor.alarm.max.volume";private int mMediaMinVolume;
private int mMediaMaxVolume;
private int mAlarmMinVolume;
private int mAlarmMaxVolume;mMediaMinVolume = SystemProperties.get(MEDIA_MIN_VOLUME);
mMediaMaxVolume = SystemProperties.get(MEDIA_MAX_VOLUME);
mAlarmMinVolume = SystemProperties.get(ALARM_MIN_VOLUME);
mAlarmMaxVolume = SystemProperties.get(ALARM_MAX_VOLUME);

        这样就拿到了对应的相关数据,用来对音量信息的判断与恢复。

二、定制设置

        如果只有一组设置,直接使用上面的代码就可以了。但是如果当前有多个车型,且对音量的边界值设置还不一样,这就需要定制化设置了。例如我们有 xx01 和 xx02 两个车型,他们的定制化文件存放在 /device/xiaoxu/xx01 和 /device/xiaoxu/xx02 下。

1、配置默认值

        这里配置默认值需要覆盖上面的配置信息,所以需要添加 overlay 路径。

xx01

源码位置:/device/xiaoxu/xx01/overlay/packages/services/Car/service/res/values/config.xml

<integer name="mediaMaxVolume">18</integer>
<integer name="mediaMinVolume">3</integer>
<integer name="alarmMaxVolume">18</integer>
<integer name="alarmMinVolume">3</integer>

 xx02

源码位置:/device/xiaoxu/xx02/overlay/packages/services/Car/service/res/values/config.xml

<integer name="mediaMaxVolume">22</integer>
<integer name="mediaMinVolume">7</integer>
<integer name="alarmMaxVolume">22</integer>
<integer name="alarmMinVolume">7</integer>

        这样该文件就会覆盖上面的设置,而对于数值的初始化和获取方式与上面的相同,这里就不再重复添加。

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

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

相关文章

Java多线程是什么?

Java多线程是什么&#xff1f; Java多线程是指在程序中同时运行多个线程&#xff0c;每个线程都是独立运行的&#xff0c;即有自己的执行路径、栈、寄存器等资源&#xff0c;并且可以同步地访问共享数据。 Java多线程的主要优势在于能够充分利用多核处理器&#xff0c;同时提…

移动端原生实现列表列固定横向滚动功能

功能介绍&#xff1a; 在移动端开发中&#xff0c;会用到列表作为信息展示方式&#xff0c;一般希望上下滚动时&#xff0c;可以固定表头&#xff0c;左右滚动时&#xff0c;可以固定最左列。 需求&#xff1a; 1、列表可以使用数组循环遍历&#xff1b; 2、上下滚动时&…

离线环境下使用百度地图(vue版)(展示自己的地图瓦片)3.0版本api

1.下载自己想要的地图网片 (1)瓦片图下载 提取百度网盘中文件&#xff0c;然后运行exe文件&#xff0c;选择要下载的层级及地区即可 百度网盘链接&#xff1a;https://pan.baidu.com/s/16sOJ9ws7HCgNH3EMf7Ejyg?pwd0q0e 提取码&#xff1a;0q0e (2)将瓦片图映射到网上 推荐使…

CSS中常用的10个文本样式属性

一个页面中&#xff0c;文本样式&#xff0c;是必不可少的&#xff0c;当然css也给我们准备了很多很多很多的文本样式&#xff0c;以下列举了10个常用的文本样式属性及常用的属性值&#xff0c;掌握了&#xff0c;也基本满足使用了 1: text-transform 可以用来设置文本的大小写…

Python-docx 深入word源码 自定义字符间距

代码和实现效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 调整pt设置字间距 def SetParagraphCharSpaceByPt(run, pt1):通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距…

Blender学习--制作带骨骼动画的机器人

1. 首先创建一个机器人模型 时间关系&#xff0c;这部分步骤有时间补充 2. 然后为机器人创建一副骨架 时间关系&#xff0c;这部分步骤有时间补充 3.骨骼绑定 切换到物体模式&#xff0c;选中机器人头部&#xff0c;Shift选中骨骼&#xff0c;切换到姿态模式&#xff0c;&am…

SpringBoot集成系列--xxlJob

文章目录 一、搭建调度中心xxl-job-admin1、下载项目2、调整项目参数3、执行初始化数据库SQL4、启动项目5、访问 二、集成步骤1、添加xxl-job的依赖2、添加xxl-job的依赖3、配置执行器4、创建执行器5、开发任务1&#xff09;方式1&#xff1a;BEAN模式&#xff08;方法形式&…

RocketMQ源码

RocketMQ的核心三流程 启动流程 RocketMQ服务端由两部分组成NameServer和Broker&#xff0c;NameServer是服务的注册中心&#xff0c;Broker会把自己的地址注册到NameServer&#xff0c;生产者和消费者启动的时候会先从NameServer获取Broker的地址&#xff0c;再去从Broker发…

【自动驾驶】2023年度盘点:智能汽车、自动驾驶、车联网必读书

2023年&#xff0c;智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展。自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡&#xff0c;更重要的是相关技术成本的下降。根据《全球电动汽车展望2023》等行业报告&#xff0c;预计2023年平均成本将降至100美元/千瓦时以下&#xf…

知识笔记(四十八)———mysql的优缺点

MySQL作为一个广泛应用的关系型数据库管理系统&#xff0c;具有以下优点和缺点&#xff1a; 优点&#xff1a; 开源和免费&#xff1a;MySQL是开源软件&#xff0c;用户可以免费获取和使用它。这使得MySQL成为个人开发者和小型组织的理想选择。 良好的性能&#xff1a;MySQL经…

成都工业学院Web技术基础(WEB)实验八:BOM、DOM基本操作

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

【开源】基于Vue.js的就医保险管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 085 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S085。} 文末获取源码&#xff0c;项目编号&#xff1a;S085。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预…

最好的猫罐头品牌有哪些?精选的5款口碑好的猫罐头推荐!

对于一个刚入门的养猫小白来说&#xff0c;面对市面上琳琅满目的猫罐头选择确实让人头大。我们总想选到营养价值高的罐头&#xff0c;但又怕猫咪不喜欢吃&#xff0c;也担心选到不安全的产品。 最好的猫罐头品牌有哪些&#xff1f;根据我开宠物店7年的经验&#xff0c;今天我将…

Java基础——static关键字

对象只有在new的时候才会分配空间&#xff0c;有时候我们希望不管是否产生了对象或无论产生了多少对象的情况下&#xff0c;某些特定的数据在内存空间里只有一份&#xff0c;就可以static修饰成员&#xff0c;也称静态成员或类成员。 static可修饰属性、方法、代码块、内部类。…

python一点通:参数列表里面有星号 * 什么意思?

在Python类或函数参数列表中&#xff0c;我们有时会看到星号*&#xff0c;它是什么意思呢&#xff1f; 什么是仅限关键字参数&#xff1f; Python 3中引入的仅限关键字参数是指必须通过其名称来指定的函数或方法参数。它们避免了由于存在多个参数而引起的混淆&#xff0c;增强…

「哈士奇赠书活动 - 46期」-『技术人修炼之道:从程序员到百万高管的72项技能(第2版)』

⭐️ 赠书 - 《技术人修炼之道&#xff08;第2版&#xff09;》 ⭐️ 内容简介 本书旨在帮助计算机IT技术人员提升职场核心技能、架构思维、团队管理能力、商业认知&#xff0c;让每一位普通的技术从业者&#xff0c;修炼成为"技术职场超级个体”&#xff0c;通过全面升级…

IntelliJ IDEA无公网远程连接Windows本地Mysql数据库提高开发效率

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

windows启动出现 zookeeper此处不应有java

可能是Java 路径出了问题&#xff0c;这个programFiles直接有空格&#xff0c;没错就有空格&#xff0c;笔者一开始以为这么点算什么空格&#xff0c;需要把这个对应的Java文件到别的英文路径下&#xff0c;并且修改环境变量。就可以启动的。 还可以启动方式有很多种&#xff0…

2.2 模型基础

建模流程 作业 这次搞了10天左右终于把作业做完了。 先是去学习了下如何建模->然后将模型导入Substance Painter里绘制贴图->最后导入到unity中&#xff08;虽然最后效果很差&#xff09;&#xff0c;但是回过头来看整个过程学习到了次时代美术的工作流&#xff0c;思考…

658. 找到 K 个最接近的元素

658. 找到 K 个最接近的元素 Java代码&#xff1a;滑窗 class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> list new ArrayList<>();for (int i 0; i < arr.length; i) {arr[i] arr[i] - x;}for(i…