Andriod手机的铃声默认保存在system/media/audio/下面,有四个文件夹,分别是alarms,notifications,ringtones,ui。对应闹钟、通知、铃声、UI音效。root的手机可以直接替换修改相应目录下的文件来修改铃声。那这些声音是从哪里来的呢。由于需要修改默认的铃声,就读了一下源码,这里进行记录一下。

在源码中,这些文件保存在frameworks\base\data\sounds目录下面,通过修改相应的mk文件把这些声音文件放到手机的相应目录。手机启动后会调用媒体库对手机内外存储上的多媒体文件进行扫描,保存其URI到媒体库的数据库中。当设置铃声时,会调用媒体库的(mediaProvider)RingtonePickerActivity进行设置。这里铃声Uri保存在数据库中,通过媒体库扫描出来显示个列表供选择。默认铃声的URI保存在设置(Settings)的数据库中,在表system里面。

修改默认铃声

修改mk文件,ro.config.ringtone对应手机默认铃声,ro.config.alarm_alert对应闹钟默认闹铃,ro.config.notification_sound设置通知默认响铃。我这里修改的是/build/target/product/full_base.mk,编译的时候这些值会被编到  build.prop内。

PRODUCT_PROPERTY_OVERRIDES := \

ro.config.ringtone=yami_style1.ogg \

ro.config.alarm_alert=Alarm_Rooster_02.ogg \

ro.config.notification_sound=yami_notification.ogg

在MediaScanner.java中读取并保存配置到设置里面。

private static final String DEFAULT_RINGTONE_PROPERTY_PREFIX ="ro.config.";

private void setDefaultRingtoneFileNames() {

mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX

+ Settings.System.RINGTONE);

mDefaultNotificationFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX

+ Settings.System.NOTIFICATION_SOUND);

mDefaultAlarmAlertFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX

+ Settings.System.ALARM_ALERT);

}

...

if (TextUtils.isEmpty(mDefaultRingtoneFilename) ||

doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) {

needToSetSettings = true;

}

...

if(needToSetSettings) {                 if (notifications) {                     setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId);                     mDefaultNotificationSet = true;                 } else if (ringtones) {                     setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId);                     if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {                         // Set the setting to the given URI for RINGTONE_2                         setSettingIfNotSet(Settings.System.RINGTONE_2, tableUri, rowId);                     }                     mDefaultRingtoneSet = true;                 } else if (alarms) {                     setSettingIfNotSet(Settings.System.ALARM_ALERT, tableUri, rowId);                     mDefaultAlarmSet = true;                 }             } 这里看到写入了数据库中。

android系统默认铃声,Android系统修改默认铃声相关推荐

  1. 设置mysql默认字符集_MySQL之修改默认引擎和字符集

    一.数据库引擎 1.1 查看数据库引擎 mysql> show engines; +--------------------+---------+------------------------ ...

  2. mac永久更换php默认版本,mac如何修改默认php

    mac修改默认php的方法:首先新建一个".bas_profile"文件并编辑:然后在该文件中输入自己想要的php版本:接着通过"source ~/.bash_profi ...

  3. 计算机更改默认设置,电脑怎么修改默认打开程序 Win7设置默认打开程序方法详解...

    在使用电脑的时候,我们经常会遇到这样的情况,当电脑中安装有多个浏览器.播放器时,总有一些软件会修改我们的默认打开程序,比如安装搜狗浏览器后,以后打开网页总是默认以搜狗浏览器打开,而之前的默认IE浏览器 ...

  4. linux 默认启动内核,ubuntu修改默认启动内核

    一.序言 新换的笔记本由于太新的主板芯片,驱动还没有完善.每次升级系统内核都要小心谨慎.经常发生部分硬件驱动失败的事情. 系统Ubuntu 20.04.2 LTS x86_64 ,我现在使用的两个版本 ...

  5. vscode设置默认新建html,VScode修改默认生成的HTML模板的方法

    在VScode中,新建HTML页面时可以输入!+tab键,快速生成HTML代码模板,默认生成的代码模板如下: Document 由于生成的代码模板中有一些不需要,所以每次生成后都需要删除,很麻烦.其实 ...

  6. php默认日志位置,Laravel 修改默认日志文件名称和位置的例子

    修改默认日志位置 我们平常的开发中可能一直把laravel的日志文件放在默认位置不会有什么影响,但如果我们的项目上线时是全量部署,每次部署都是git中最新的代码,那这个时候每次都会清空我们的日志,显示 ...

  7. 修改app的默认设置(包括修改默认launcher)

    1.改为自己的launcher ComponentName component = new ComponentName( context.getPackageName(), MainActivity. ...

  8. linux默认网关文件,Linux修改默认网关

    stawang 于 2009-08-07 21:46:26发表: 楼上的正解! youth3008 于 2009-08-07 21:42:28发表: [i=s] 本帖最后由 youth3008 于 2 ...

  9. mysql 5.6 修改默认字符集_mysql5.6修改默认字符集

    1.修改前mysql> show variables like 'char%'; +--------------------------+---------------------------- ...

  10. centos7网口添加IP,修改默认路由永久地址生效

    1永久增加ip地址和路由 网卡永久添加ip地址 注释:ens192为管理地址网卡,请根据实际情况进行修改,网关以192.168.160.1为例 复制一份网卡配置文件命名为ifcfg-ens192:1 ...

最新文章

  1. JavaScript对象,方括号和算法
  2. RegExp 正则
  3. opencv findContours 崩溃CrtDbgBreak
  4. C语言二级指针与典型应用(1)
  5. [转载]Ubuntu安装配置Mysql
  6. Bootstrap3基础 下载bootstrap3压缩包和相应的jQuery文件
  7. cfdiv2/c/找规律
  8. linux导出mysql下ssl证书_Linux系统下生成证书 https证书
  9. Flink ProcessFunction 介绍使用
  10. 软件包管理:源码包管理-源码包与RPM包的区别
  11. vc mysql free result_VC的MySQL编程
  12. 解决Debug certificate expired的问题 - 转
  13. 使用WndProc来处理消息
  14. 常见问题-瑞友天翼应用虚拟化系统安装之前需要做什么准备
  15. tcs标准编写软件_tcs 2010软件下载
  16. 树莓派-13-红外遥控器HX1838
  17. 角色和武器Shader特效开发
  18. Word文档如何在方框里打勾?三招让你从入门到精通,工作效率翻倍
  19. OpenCV图像滤镜操作-模糊
  20. 上海各IT培训机构深度比较

热门文章

  1. java content()_理解content(一)
  2. python简易爬虫课程设计_python实现简单爬虫功能的示例
  3. Java架构-面试前必须知道的MySQL命令【explain】
  4. 高通的专利霸权要到头了?
  5. 【Origin】晨起忆梦
  6. JS动态生成的元素,其对应的方法不响应(比如单击事件,鼠标移动事件等)...
  7. 【Go语言】【14】GO语言的接口类型
  8. linux下rpm包和命令使用简介
  9. OC基础数据类型-NSData-NSMutableData-NSString
  10. nginx处理web请求分析