Android默认系统声音/大小修改及配置

本文介绍如何通过修改系统层默认音量、数据库设置、配置文件属性及替换默认音效文件等四种方法,来关闭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 下面各个模块的文件,然后在系统开机的时候,扫描这些文件,将其加入到数据库中,之后在设置中更换声音时,则直接从数据库中查询这些音乐文件,然后供用户选择。

总结

系统的媒体这块是很重也很大的一块,这里只是一点点皮毛,只是用到时查到的,要想系统系统学习还得很多工作需要研究。如有问题请及时留言反馈。


<think> 首先,用户的问题是:“我想查找在Android系统修改默认通知声音的方法”。用户提供了三个引用,但指令说这些引用仅供参考,不是用户真正的需求。我需要根据用户上一次的问题和我的回答来参考,但在这个上下文中,用户之前的问题没有被显示出来;只有系统级指令和当前查询。 系统级指令强调: - 所有行内数学表达式使用 `$...$` - 独立公式使用 `$$...$$` 并单独成段 - LaTeX 语法正确 - 使用中文回答 - 生成相关问题 - 回答中引用的段落末尾自然地添加引用标识,如 [^1] 在用户查询中,提到了引用 [^1], [^2], [^3],这些引用来自用户提供的引用文本。用户说这些引用仅供参考,但指令说“尽可能多的参考用户上一次的问题和你的回答”。然而,在这个对话历史中,没有显示上一次的问题和回答;只有系统指令和当前查询。 用户查询是:“我想查找在Android系统修改默认通知声音的方法”。用户还提供了引用内容: - 引用[1]: 关于修改系统通知声音大小或禁用声音。 - 引用[2]: 关于Android系统默认铃声的位置和修改方法。 - 引用[3]: 关于Android 8.1修改默认通知声音。 基于这些引用,用户的问题是询问如何修改默认通知声音的方法。 我的回答需要: - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 - 使用中文。 - 生成相关问题。 - 在回答中,如果需要引用,自然地添加引用标识。 回答结构: 1. 先解释问题。 2. 逐步提供修改方法。 3. 基于引用内容,提供具体步骤。 4. 结束时生成相关问题。 现在,分析引用内容: - 引用[1]: 提到修改声音大小或禁用声音。方法包括直接修改系统默认声音大小。 - 引用[2]: 指出默认铃声保存在 `system/media/audio/notifications` 目录下,可以通过替换文件修改。 - 引用[3]: 提到在Android 8.1修改默认通知声音。 所以,修改默认通知声音的方法可能包括: - 替换系统默认声音文件。 - 修改系统设置或代码(对于开发者或定制ROM)。 由于用户提到了“系统修改”,可能需要root权限或定制系统。 步骤: 1. **定位默认声音文件**:在Android系统中,默认通知声音通常位于 `/system/media/audio/notifications` 目录。 2. **替换文件**:可以通过root访问替换该目录下的文件。 3. **禁用声音**:如引用[1]所述,修改声音大小或禁用。 4. **其他方法**:修改系统配置文件或使用设置选项。 在回答中,我需要引用段落时添加引用标识,例如 [^1]。 最后,生成相关问题。 组织回答: - 引言:解释问题。 - 逐步方法: - 方法1:替换声音文件。 - 方法2:修改系统设置或代码。 - 方法3:禁用声音。 - 注意事项:提到需要root权限等。 - 生成相关问题。 确保使用中文。 生成相关问题示例: 1. 如何在不root的情况下修改通知声音? 2. Android不同版本修改默认通知声音的差异? 3. 如何自定义通知声音? 现在,写出回答。 </think> ### Android系统修改默认通知声音的方法 在Android系统中,修改默认通知声音主要通过替换系统声音文件或调整系统配置来实现。基于您提供的引用内容和相关知识,以下是几种常见方法。请注意,大多数方法需要root权限或系统定制能力,因为涉及系统分区修改;普通用户可能需要依赖第三方应用或开发者选项。以下是逐步说明: #### 1. **替换默认声音文件** Android系统默认通知声音文件通常存储在 `/system/media/audio/notifications` 目录下(例如,`Oxygen.ogg` 或 `Chime.ogg`)。您可以通过替换这些文件来修改默认声音。 - **步骤**: 1. 获取root权限(例如使用Magisk或adb命令)。 2. 下载或创建自定义声音文件(格式如OGG或MP3),并将其重命名为系统默认文件名(如 `notification_sound.ogg`)。 3. 使用文件管理器(如Root Explorer)或adb命令将文件复制到 `/system/media/audio/notifications` 目录。 ```bash adb push custom_notification.ogg /sdcard/ # 先将文件推送到设备 adb shell su mount -o rw,remount /system # 挂载系统分区为可写 cp /sdcard/custom_notification.ogg /system/media/audio/notifications/notification_sound.ogg chmod 644 /system/media/audio/notifications/notification_sound.ogg # 设置权限 reboot # 重启设备生效 ``` 4. 重启后,系统会加载新文件作为默认通知声音。 - **注意事项**: 确保文件格式兼容(Android优先OGG),并在修改前备份原文件。引用中提到铃声默认保存在 `system/media/audio` 下的对应目录,可直接替换文件修改[^2]。 #### 2. **修改系统设置或代码(针对开发者或定制ROM)** 如果您是系统开发者或定制ROM用户,可以通过修改系统配置文件或源代码来更改默认声音(适用于禁用声音或设置全局默认)。 - **禁用声音方法**: - 修改 `/system/etc/audio_policy.conf` 或类似配置文件,添加或调整量参数(如 `notification_volume=0`)。引用[1]提到直接修改系统默认声音大小,可通过代码实现[^1]。 - 在Android源码中(如AOSP),编辑 `frameworks/base/core/res/res/values/config.xml` 文件,查找 `def_notification_sound` 属性,并更改其值指向新文件路径。 ```xml <string name="def_notification_sound">file:///system/media/audio/notifications/custom_sound.ogg</string> ``` - 重新编译系统镜像并刷入设备。 - **禁用通知声音**: - 如果需要完全禁用通知声音(而非修改),在系统设置中添加代码逻辑(如 `AudioManager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true)`)。 - 引用[3]提到在Android 8.1中修改默认声音,需注意不同Android版本(如5.1、8.1)的配置文件路径可能不同[^3]。 #### 3. **使用用户级方法(无需root)** 对于普通用户,如果没有root权限,可以通过系统设置或第三方应用间接修改: - **通过系统设置**: 1. 进入“设置” > “声音和振动” > “通知声音”。 2. 选择自定义声音(需将文件存储在 `/sdcard/Notifications/` 或其他用户目录)。 3. 但此方法仅影响当前设备用户,不修改系统全局默认值。 - **第三方应用**: - 使用如“Notification Sound Changer”等应用,允许覆盖通知声音设置。 #### 注意事项 - **风险提示**: 修改系统文件可能导致系统不稳定或安全问题;建议在测试设备操作。 - **备份**: 修改前备份原文件或创建系统镜像。 - **兼容性**: Android版本差异(如5.1 vs 8.1)影响方法细节,引用[2]和[3]强调了源码级别的修改[^2][^3]。 - **效果验证**: 修改后,发送测试通知(如使用adb命令 `adb shell service call notification 1 s16 "Test"`)检查声音变化。 通过以上方法,您可以根据需求灵活修改默认通知声音。如有具体Android版本或设备型号,可提供更多细节以优化方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值