前言
声音管理系统用来实现声音的输入和输出、声音的控制和路由等功能,包括主和各种音源的音量调节、声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理、音效的播放、音轨设置和播放、录音设置和启动等功能。
最近在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知时,声音很大吓到用户。索性就把通知声音关掉。下面就说说关闭声音的几种方法,以及修改系统默认声音的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
本文是基于Android5.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 了。
二、修改数据库中的通知声音值
媒体声音这些数据在数据库中都会默认的存放数据,我们知道大多数的数据都是系统初次启动的时候在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]; }
实际就是返回了我们在方案一中系统里面默认音量大小数组里面的值。所以方案一和方案二实际是一个效果
三、修改ro.config.notification_sound的属性值
此属性值的意思就是通知默认的音乐文件文件名,我们在系统代码build/target/product/full_base.mk 中定义了,如果我们不想有声音那么我们可以将默认值改为不存在的文件,则不会播放通知声音了,当然我们也可以在客户定义的mk中使用PRODUCT_PROPERTY_OVERRIDES 去复写此属性,将其指定为不存在文件或者为空,这样就不会有通知声音响了。
四、修改默认的声音
系统默认了很多的声音,那么我们要修改一些系统里默认的音效文件呢,那么我们可以修改frameworks/base/data/sounds下面文件及文件夹中的声音文件,如果改了名字记得要在mk中将原来的替换为新的名字。这下面的mk的作用是将这些音乐文件全部打包到系统system/media/audio下面各个模块的文件,然后在系统开机的时候,扫描这些文件,将其加入到数据库中,之后在设置中更换声音时,则直接从数据库中查询这些音乐文件,然后供用户选择。
总结
系统的媒体这块是很重也很大的一块,这里只是一点点皮毛,只是用到时查到的,要想系统系统学习还得很多工作需要研究。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍android编程获取和设置系统铃声和音量大小的方法,包括了android编程获取和设置系统铃声和音量大小的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android编程获取和设置系统铃声和音量大小的方法。分享给大家供大家参考,具体如下: 通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManag
本文向大家介绍Android开发中Launcher3常见默认配置修改方法总结,包括了Android开发中Launcher3常见默认配置修改方法总结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发中Launcher3常见默认配置修改方法。分享给大家供大家参考,具体如下: Launcher概述 Launcher是开机完成后第一个启动的应用,用来展示应用列表和快捷方式、小部件等
我想为我的用户提供显示特定
本文向大家介绍linux系统中修改tomcat默认输入日志路径的方法,包括了linux系统中修改tomcat默认输入日志路径的方法的使用技巧和注意事项,需要的朋友参考一下 1、修改catalina.sh 进入tomcat安装目录/bin,找到catalina.sh,先进行备份。 对本地的catalina.sh进行修改,这里是以将日志目录修改为/data/logs为例,即将$CATALINA_BAS
我正在使用iTextSharp创建一个新的pdf文件。pdf将包含一个标题和一个pdf表格。生成的pdf文件的文件大小应该尽可能小,所以我使用默认字体(Helvetica,12pt)。有没有办法将默认字体大小从12pt更改为8pt。 我知道我可以为每个pdf表格单元格设置字体。 但是是否可以为整个文档/表格设置默认字体大小,这样我就不需要为每个表格单元格额外设置字体了? (我在谷歌上搜索了这个话题
问题内容: 我有一个需要修改数据库表中列默认值的要求。该表已经是数据库中的现有表,并且当前该列的默认值为NULL。现在,如果将新的默认值添加到此列,如果我是正确的话,它将列的所有现有NULL更新为新的DEfault值。有没有一种方法可以不执行此操作,但仍在列上设置新的默认值。我的意思是我不想更新现有的NULL,并希望它们保留为NULL。 在这方面的任何帮助,不胜感激。谢谢 问题答案: 您对将会发生