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.pswp.cn/news/213842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213842.shtml
英文地址,請注明出處:http://en.pswp.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…