99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

Android默認系統(tǒng)聲音/大小修改及配置

發(fā)布時間:2016-12-23 21:34  回復:0  查看:2692   最后回復:2016-12-23 21:34  

Android開發(fā)中,在做定制需求的時候,需要修改系統(tǒng)通知的聲音,將其禁用掉,避免第三方應用發(fā)送通知時,聲音很大,嚇著用戶。索性就把通知聲音關掉。下面就說說關閉聲音的幾種方法,以及修改系統(tǒng)默認聲音的方法。

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

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

  還定義了一個數(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 了。

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

  public static int getDefaultStreamVolume(int streamType) {

  return DEFAULT_STREAM_VOLUME[streamType];

  }

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

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

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

  4. 修改默認的聲音

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

  總結

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

 

來源:Android夢想特工隊

您還未登錄,請先登錄

熱門帖子

最新帖子

?