国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中默認系統(tǒng)的聲音/大小修改和配置詳解

2019-10-22 18:23:08
字體:
供稿:網(wǎng)友

前言

聲音管理系統(tǒng)用來實現(xiàn)聲音的輸入和輸出、聲音的控制和路由等功能,包括主和各種音源的音量調(diào)節(jié)、聲音焦點控制,聲音外設(shè)的檢測和狀態(tài)管理,聲音源輸入和輸出的策略管理、音效的播放、音軌設(shè)置和播放、錄音設(shè)置和啟動等功能。

最近在做定制需求的時候,需要修改系統(tǒng)通知的聲音,將其禁用掉,避免第三方應用發(fā)送通知時,聲音很大嚇到用戶。索性就把通知聲音關(guān)掉。下面就說說關(guān)閉聲音的幾種方法,以及修改系統(tǒng)默認聲音的方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

本文是基于Android5.1的代碼

一、直接修改系統(tǒng)層默認的聲音大小

在系統(tǒng)代碼frameworks/base/media/java/android/274712.html">android/210550.html">android/media/AudioService.java的開頭定義了兩個數(shù)組,一個MAX_STREAM_VOLUME 這里面定義了各種聲音的最大值(最大值不是100,所以需要AudioManager.getStreamMaxVolume(type)來獲取各個音量的最大值),然后進行設(shè)置。

還定義了一個數(shù)組DEFAULT_STREAM_VOLUME 這里面則和MAX_STREAM_VOLUME里定義的順序是一樣,表明了各種聲音的默認的大小。

此塊代碼如下:

/** @hide Maximum volume index values for audio streams */ private static int[] MAX_STREAM_VOLUME = new int[] {  5, // STREAM_VOICE_CALL  7, // STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME  7, // STREAM_RING  15, // STREAM_MUSIC  7, // STREAM_ALARM  7, // STREAM_NOTIFICATION  15, // STREAM_BLUETOOTH_SCO  7, // STREAM_SYSTEM_ENFORCED  15, // STREAM_DTMF  15 // STREAM_TTS }; private static int[] DEFAULT_STREAM_VOLUME = new int[] {  4, // STREAM_VOICE_CALL  7, // STREAM_SYSTEM  5, // STREAM_RING  11, // STREAM_MUSIC  6, // STREAM_ALARM  5, // STREAM_NOTIFICATION  7, // STREAM_BLUETOOTH_SCO  7, // STREAM_SYSTEM_ENFORCED  11, // STREAM_DTMF  11 // STREAM_TTS };

如果我們需要修改默認的通知聲音,則可以將STREAM_NOTIFICATION 前面的數(shù)值 5 給為 0即可,這樣默認聲音就為0 了。

二、修改數(shù)據(jù)庫中的通知聲音值

媒體聲音這些數(shù)據(jù)在數(shù)據(jù)庫中都會默認的存放數(shù)據(jù),我們知道大多數(shù)的數(shù)據(jù)都是系統(tǒng)初次啟動的時候在SettingProvider應用中加載初始化的值,當然通知的聲音也在里面。

具體的代碼在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 其中有個方法loadVolumeLevels(db) 此方法則是加載所有默認聲音大小的地方,具體代碼如下:

stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" + " VALUES(?,?);");loadSetting(stmt, Settings.System.VOLUME_MUSIC,  AudioService.getDefaultStreamVolume(AudioManager.STREAM_MUSIC));loadSetting(stmt, Settings.System.VOLUME_RING,   AudioService.getDefaultStreamVolume(AudioManager.STREAM_RING));loadSetting(stmt, Settings.System.VOLUME_SYSTEM,  AudioService.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM));loadSetting(stmt,Settings.System.VOLUME_VOICE,AudioService.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL));loadSetting(stmt, Settings.System.VOLUME_ALARM,   AudioService.getDefaultStreamVolume(AudioManager.STREAM_ALARM));loadSetting(stmt,Settings.System.VOLUME_NOTIFICATION,AudioService.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION));loadSetting(stmt,Settings.System.VOLUME_BLUETOOTH_SCO,AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO));

我們發(fā)現(xiàn)loadSetting中把所有聲音相關(guān)默認值大小的都寫入數(shù)據(jù)庫中了,那么我們就可以從這里下手了,在Settings.System.VOLUME_NOTIFICATION的設(shè)置項中我們就把他設(shè)置為0,則系統(tǒng)通知默認的聲音就為0 ,我們再看看AudioService.getDefaultStreamVolume這個方法的實現(xiàn).

public static int getDefaultStreamVolume(int streamType) { return DEFAULT_STREAM_VOLUME[streamType];}

實際就是返回了我們在方案一中系統(tǒng)里面默認音量大小數(shù)組里面的值。所以方案一和方案二實際是一個效果

三、修改ro.config.notification_sound的屬性值

此屬性值的意思就是通知默認的音樂文件文件名,我們在系統(tǒng)代碼build/target/product/full_base.mk 中定義了,如果我們不想有聲音那么我們可以將默認值改為不存在的文件,則不會播放通知聲音了,當然我們也可以在客戶定義的mk中使用PRODUCT_PROPERTY_OVERRIDES 去復寫此屬性,將其指定為不存在文件或者為空,這樣就不會有通知聲音響了。

四、修改默認的聲音

系統(tǒng)默認了很多的聲音,那么我們要修改一些系統(tǒng)里默認的音效文件呢,那么我們可以修改frameworks/base/data/sounds下面文件及文件夾中的聲音文件,如果改了名字記得要在mk中將原來的替換為新的名字。這下面的mk的作用是將這些音樂文件全部打包到系統(tǒng)system/media/audio下面各個模塊的文件,然后在系統(tǒng)開機的時候,掃描這些文件,將其加入到數(shù)據(jù)庫中,之后在設(shè)置中更換聲音時,則直接從數(shù)據(jù)庫中查詢這些音樂文件,然后供用戶選擇。

總結(jié)

系統(tǒng)的媒體這塊是很重也很大的一塊,這里只是一點點皮毛,只是用到時查到的,要想系統(tǒng)系統(tǒng)學習還得很多工作需要研究。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 玉田县| 宣汉县| 林甸县| 通海县| 溧阳市| 卢龙县| 乌拉特后旗| 始兴县| 沿河| 沁水县| 怀宁县| 津市市| 毕节市| 临夏市| 社会| 荣昌县| 晴隆县| 梁山县| 平舆县| 抚顺市| 岑巩县| 资溪县| 鞍山市| 东兴市| 巩留县| 康定县| 鄂托克前旗| 平原县| 奉节县| 万山特区| 册亨县| 阳信县| 铅山县| 合阳县| 泰宁县| 丹江口市| 宁武县| 清苑县| 临安市| 灵山县| 双辽市|