Android預設系統聲音/大小修改及配置【轉】

來源:互聯網
上載者:User

標籤:uil   tar   provider   順序   tle   bsp   .com   tin   rod   

本文轉載自:http://blog.csdn.net/a8316124/article/details/60574859

在做定製需求的時候,需要修改系統通知的聲音,將其禁用掉,避免第三方應用發送通知時,聲音很大,嚇著使用者。索性就把通知聲音關掉。下面就說說關閉聲音的幾種方法,以及修改系統預設聲音的方法。

1. 直接修改系統層預設的聲音大小

在系統代碼 frameworks/base/media/java/android/media/AudioService.java 的開頭定義了兩個數組,一個 MAX_STREAM_VOLUME 這裡面定義了各種聲音的最大值( 最大值不是100 ,所以需要 AudioManager.getStreamMaxVolume(type) 來擷取各個音量的最大值),然後進行設定。

還定義了一個數組 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 前面的數值 5 給為 0即可,這樣預設聲音就為0 了。

2. 修改資料庫中的通知聲音值

媒體聲音這些資料在資料庫中都會預設的存放資料,我們知道大多數的資料都是系統初次啟動的時候在 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));

我們發現loadSetting中把所有聲音相關預設值大小的都寫入資料庫中了,那麼我們就可以從這裡下手了,在 Settings.System.VOLUME_NOTIFICATION 的設定項中我們就把他設定為0,則系統通知預設的聲音就為0 ,我們再看看 AudioService.getDefaultStreamVolume 這個方法的實現.

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

實際就是返回了我們在方案一中系統裡面預設音量大小數組裡面的值。所以方案一和方案二實際是一個效果

3. 修改ro.config.notification_sound的屬性值

此屬性值的意思就是通知預設的音樂檔案檔案名稱,我們在系統代碼 build/target/product/full_base.mk 中定義了,如果我們不想有聲音那麼我們可以將預設值改為不存在的檔案,則不會播放通知聲音了,當然我們也可以在客戶定義的mk中使用 PRODUCT_PROPERTY_OVERRIDES 去複寫此屬性,將其指定為不存在檔案或者為空白,這樣就不會有通知聲音響了。

4. 修改預設的聲音

系統預設了很多的聲音,那麼我們要修改一些系統裡預設的音效檔案呢,那麼我們可以修改 frameworks/base/data/sounds 下面檔案及檔案夾中的音效檔,如果改了名字記得要在mk中將原來的替換為新的名字。這下面的mk的作用是將這些音樂檔案全部打包到系統 system/media/audio 下面各個模組的檔案,然後在系統開機的時候,掃描這些檔案,將其加入到資料庫中,之後在設定中更換聲音時,則直接從資料庫中查詢這些音樂檔案,然後供使用者選擇。

總結

系統的媒體這塊是很重也很大的一塊,這裡只是一點點皮毛,只是用到時查到的,要想系統系統學習還得很多工作需要研究。如有問題請及時留言反饋。

 

Android預設系統聲音/大小修改及配置【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.