android5.1修改系统默认音量

本文详细介绍了四种方法来关闭Android系统的通知声音,包括修改系统层默认音量、数据库声音值、系统属性值以及默认声音文件,适用于定制需求场景。

在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知时,声音很大,吓着用户。索性就把通知声音关掉。下面就说说关闭声音的几种方法,以及修改系统默认声音的方法。

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 下面各个模块的文件,然后在系统开机的时候,扫描这些文件,将其加入到数据库中,之后在设置中更换声音时,则直接从数据库中查询这些音乐文件,然后供用户选择。

转载于:https://www.cnblogs.com/CZM-/p/9708990.html

<think>首先,用户的问题是基于之前的上下文:用户想查找在MTK平台的Android 11系统修改耳机默认音量的方法。用户提供了几个引用,我应该参考这些引用。 回顾引用: - 引用[1]:涉及修改Android 14的默认音量设置,包括通知、通话、闹钟、平板铃声等,提到了在config.xml中修改默认值,以及在AudioService.java修改。 - 引用[2]:修改音量条样式的路径。 - 引用[3]:修改Android 5.1的媒体和系统默认音量,在AudioService.java中设置MAX_STREAM_VOLUME和DEFAULT_STREAM_VOLUME数组。 用户的问题焦点是:在MTK平台的Android 11系统修改耳机默认音量。 关键点: - "耳机默认音量" – 这可能指的是当耳机插入时,系统默认音量设置。 - 平台:MTK(MediaTek)。 - Android版本:Android 11。 从引用中,我可以看出: - 在引用[3]中,AudioService.java文件处理了默认音量设置,包括各种流类型的默认音量值(如STREAM_MUSIC用于媒体音量)。 - 耳机音量可能与媒体音量相关,因为耳机通常用于播放媒体。 - 在Android中,音量分为不同的流类型:STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING, STREAM_MUSIC, STREAM_ALARM, STREAM_NOTIFICATION, STREAM_BLUETOOTH_SCO, STREAM_SYSTEM_ENFORCED, STREAM_DTMF, STREAM_TTS。 耳机默认音量可能对应于STREAM_MUSIC或类似的流类型,因为媒体音量常用于耳机输出。 在引用[3]中,DEFAULT_STREAM_VOLUME数组设置了默认值: - 例如,STREAM_MUSIC默认值是15(最大值是15)。 但在用户的问题中,是Android 11,MTK平台。引用[3]是针对Android 5.1的,但我可以推断类似机制可能存在。 系统指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识如[^1]。 回答结构: - 清晰,逐步帮助用户解决。 - 参考提供的引用。 步骤: 1. 理解用户需求:修改MTK Android 11上的耳机默认音量。 2. 从引用中提取相关信息: - 引用[1]:提到了在config.xml中修改默认值,以及在AudioService.java修改。 - 引用[3]:修改默认音量在AudioService.java中通过DEFAULT_STREAM_VOLUME数组。 3. 耳机音量很可能与STREAM_MUSIC相关,因为媒体音量控制耳机输出的音量。 4.Android 11中,MTK平台可能有类似设置。路径可能类似: - AudioService.java文件中定义默认音量。 - 或者像引用[1]中提到的在config.xml中设置。 5. 提供具体修改方法。 可能的修改路径: - 在frameworks/base/services/core/java/com/android/server/audio/AudioService.java中,查找DEFAULT_STREAM_VOLUME数组。 - 对于STREAM_MUSIC,修改默认值。 - 也可能在config.xml中定义默认值,如引用[1]中所述。 引用[1]说:在Android 14中,通知和铃声的默认音量在config.xml中修改,而其他在AudioService.java中。 对于耳机,它可能不是直接一个流类型;耳机插入时,音量可能继承媒体的默认音量。 用户说“耳机默认音量”,可能指的是当耳机插入时,系统默认音量设置。 在Android中,音量设置是流类型相关的。STREAM_MUSIC通常用于媒体播放,包括耳机。 因此,修改STREAM_MUSIC的默认音量应该直接影响耳机音量。 在AudioService.java中,DEFAULT_STREAM_VOLUME数组定义了各个流的默认音量。 对于Android 11,MTK平台: - 路径可能类似:frameworks/base/services/core/java/com/android/server/audio/AudioService.java - 修改DEFAULT_STREAM_VOLUME数组中STREAM_MUSIC的值。 在引用[3]中,STREAM_MUSIC的默认15。 计算:默认值取决于最大值。最大音量在MAX_STREAM_VOLUME数组中设置。 例如,在引用[3]中: - MAX_STREAM_VOLUME for STREAM_MUSIC is 15 - DEFAULT_STREAM_VOLUME for STREAM_MUSIC is 15 如果想设置默认音量,比如80%时,如果最大值是15,80%就是12。 在代码中,设置默认值。 对于耳机,可能需要确保没有特定耳机设置覆盖。 但一般来说,修改媒体流的默认音量应该有效。 具体到MTK Android 11: - 参考引用[2],提到了vendor/mediatek/proprietary目录下有SystemUI修改,但那是音量条UI。 - 对于音量内部设置,可能还是在AOSP部分。 所以,核心修改点在AudioService.java。 回答步骤: 1. 解释相关流类型。 2. 提供修改路径。 3. 给出代码示例。 4. 提醒编译和刷机。 5. 生成相关问题。 使用中文回答。 添加引用标识:当引用用户提供的引用时,末尾加[^1], [^2], etc. 生成相关问题:在回答结束时。 最终回答结构: - 介绍修改方法。 - 逐步说明。 - 代码片段(如果适用)。 - 注意事项。 - 相关问题。 </think>基于您的问题,我参考了您提供的引用内容(尤其是引用[1]和引用[3]),并结合MTK平台Android 11的通用实现机制,为您整理修改耳机默认音量的方法。在Android系统中,"耳机默认音量"通常关联到媒体流(STREAM_MUSIC),因为耳机主要用于媒体播放(如音乐、视频)。音量设置分为最大音量(MAX_STREAM_VOLUME)和默认音量(DEFAULT_STREAM_VOLUME),后者定义了设备启动或耳机插入时的初始值。 ### 修改方法(MTK平台Android 11) 在MTK平台的Android 11上,耳机默认音量修改主要通过修改`AudioService.java`文件中的`DEFAULT_STREAM_VOLUME`数组实现。关键流类型是`STREAM_MUSIC`(媒体流),因为耳机音量默认绑定到此流。以下是详细步骤: 1. **定位文件**: - 文件路径:`frameworks/base/services/core/java/com/android/server/audio/AudioService.java` - 在Android源码中,此文件控制所有音频流的默认和最大音量设置。MTK平台可能对此有自定义实现,但核心逻辑与AOSP一致[^1][^3]。 2. **修改默认音量值**: - 在`AudioService.java`中,查找`DEFAULT_STREAM_VOLUME`数组。此数组定义了各音频流的默认音量索引。 - 耳机音量对应`STREAM_MUSIC`(索引为3)。修改其值以设置默认音量: ```java // 示例:设置媒体流(耳机)默认音量10(假设最大音量15,则10代表约67%) public static int[] DEFAULT_STREAM_VOLUME = new int[] { 4, // STREAM_VOICE_CALL(通话) 15, // STREAM_SYSTEM(系统) 8, // STREAM_RING(铃声) 10, // STREAM_MUSIC(媒体/耳机) <-- 修改此行,默认值根据需求计算(例如,最大音量*百分比) 8, // STREAM_ALARM(闹钟) 8, // STREAM_NOTIFICATION(通知) 7, // STREAM_BLUETOOTH_SCO(蓝牙) 15, // STREAM_SYSTEM_ENFORCED 11, // STREAM_DTMF 11 // STREAM_TTS }; ``` - **计算默认值**:如果最大音量15,想设置80%的默认音量,则计算$15 \times 0.8 = 12$,并填入对应位置[^1]。 - **最大音量调整**:如需更改最大音量(影响默认值范围),修改同一文件中的`MAX_STREAM_VOLUME`数组(例如,设置`STREAM_MUSIC`的最大值为20)[^3]。 3. **MTK特定注意事项**: - 在MTK平台上,某些版本可能在`config.xml`中定义默认值(如引用[1]所述),但Android 11上耳机音量通常仍通过`AudioService.java`修改。为保险起见,检查配置文件: - 文件路径:`frameworks/base/core/res/res/values/config.xml` - 查找类似条目(如`<integer name="config_audio_music_vol_default">`),如果存在,直接修改数值: ```xml <!-- 设置媒体流默认音量 --> <integer name="config_audio_music_vol_default">10</integer> ``` - 但引用[1]表明,在较新Android版本中,耳机音量可能不在此文件定义,优先以`AudioService.java`为主[^1]。 - **耳机插入事件处理**:默认音量在耳机插入时自动应用。不需要额外修改,除非MTK有自定义逻辑(检查`vendor/mediatek/proprietary`目录下的音频驱动文件,但通常无需改动)。 4. **编译和测试**: - 修改后,重新编译系统映像(使用`make`命令)。 - 刷机测试:耳机插入后,音量应直接从默认值开始(可通过`adb shell dumpsys audio`命令验证`STREAM_MUSIC`的当前值)。 - **风险提示**:修改系统文件可能导致音频不稳定,建议备份原文件并在开发环境中操作。 ### 为什么此方法有效? - Android音量系统基于流类型:`STREAM_MUSIC`直接控制耳机媒体输出。默认音量系统启动或音频设备连接(如耳机插入)时初始化。 - 引用[3]展示了Android 5.1的实现,Android 11机制类似,但路径和数组索引保持一致[^3]。引用[1]证实MTK平台在较新版本中使用配置文件,但对于耳机音量,核心仍在Java服务层[^1]。 ### 相关问题 1. 如何调整MTK平台上其他音频流(如通话音量或闹钟)的默认值? 2. Android 11中如何自定义音量条的UI样式(例如修改进度条颜色或布局)? 3. 修改系统音量后出现音频异常,该如何调试和修复? 如果您提供更多细节(如具体音量百分比或错误日志),我可以进一步优化建议!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值