动态更改铃声有几个步骤.

准备铃声

File k = new File("/sdcard/ringtone", "kolyan_.mp3");

ContentValues values = new ContentValues();

values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());

values.put(MediaStore.MediaColumns.TITLE, "My Song title");

values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg");

values.put(MediaStore.Audio.Media.ARTIST, "Some Artist");

values.put(MediaStore.Audio.Media.IS_RINGTONE, true);

values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);

values.put(MediaStore.Audio.Media.IS_ALARM, false);

values.put(MediaStore.Audio.Media.IS_MUSIC, false);

2.将其插入数据库

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());

// Line below is major because we need to delete old entry

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);

mUri = getContentResolver().insert(uri, values);

3.保存当前的默认铃声并订阅CallListener

// Be careful by calling getActualDefaultRingtoneUri in CallListener, it could return null, better way to save it in OnCreate

mOldUri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE);

TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

mTelephonyMgr.listen(new MyCallListener(), PhoneStateListener.LISTEN_CALL_STATE);

4.创建MyCallListener类

class MyCallListener extends PhoneStateListener {

@Override

public void onCallStateChanged(int state, String incomingNumber) {

switch (state) {

case TelephonyManager.CALL_STATE_RINGING:

// On call you replace the ringtone with your own mUri

RingtoneManager.setActualDefaultRingtoneUri(

MainActivity.this,

RingtoneManager.TYPE_RINGTONE,

mUri

);

break;

case TelephonyManager.CALL_STATE_IDLE:

// Restore the default ringtone

RingtoneManager.setActualDefaultRingtoneUri(

MainActivity.this,

RingtoneManager.TYPE_RINGTONE,

mOldUri

);

break;

default:

break;

}

super.onCallStateChanged(state, incomingNumber);

}

}

5.向您安装AndroidManifest.xml的权限

完成

主要想法是挂接来电,用自己的方式取代铃声.当然,您应该在通话后将默认铃声恢复为保存的值.

android 来电默认铃声,android – 来电动态覆盖默认铃声相关推荐

  1. Android系统修改gmail和google日历默认铃声,区别于系统的默认通知音

    需求: 单独修改gmail和google日历默认铃声,区别于系统的默认通知音 解决方法: 因为GMS包没有源码,所以无法通过修改apk的方法解决,只能修改获取默认铃声时的uri实现. 具体设计到的文件 ...

  2. android系统默认铃声,android播放系统默认的铃声

    播放默认通知声音 /** * 播放系统默认提示音 * * @return MediaPlayer对象 * * @throws Exception */ public void defaultMedia ...

  3. Android5.1自定义闹钟铃声,Android 设置来电铃声、通知铃声、闹钟铃声中的坑

    最新做项目,遇到一个铃声设置的bug,一直被延期了大半年,终于忍不住了,花了大半天时间来研究问题所在.其实这个功能百度一下有很多,但大部分都是同一篇文章,我们项目里最开始就是参考的百度的代码片段来实现 ...

  4. android java 怎么更换默认铃声,Android如何通过长按按钮将声音设置为铃声

    如何长按按钮将声音设置为铃声? 目前它只适用于sound4但不适用于sound5 包com.test.soundboard; import java.io.File; import java.io.F ...

  5. android 来电过滤,Call Screening(来电过滤) on Android N

    之前在看Android官方文档系统的时候看到Android N 一系列新增和改变的特性,因为工作中负责的部分和通话有关,就尤其注意到了这个Call Screening. 下面来简单介绍一下Call S ...

  6. android -- phone (三)来电流程

    上一篇是去电流程,接下来自然是来电流程,按消息的接收顺序,我们关心来电消息最开始是从哪来的,所以先RIL层开始,这里如果有涉及AT命令,均以android源码所使用的AT命令为准(即 3gpp 27. ...

  7. android init.rc中启动的service 默认是disable的,后续如何启动此服务

    如果 android init.rc中启动的service 默认是disable的,如何才能启动此服务呢? init.rc中可以直接启动service 附带的参数决定启动程序的状态,例如数据业务中配置 ...

  8. Android之ExpandableListView的各种效果(默认展开不合闭,自定义父栏目及箭头控制)

    1. 设置ExpandableListView 默认是展开的:  先实例化exListView (ExpandableListView所有数据齐全后可用,否则报错) exListView.setAda ...

  9. android连接usb后默认app,android – 记住USB连接,但不要启动应用程序

    我正在处理的应用程序通过USB连接成功连接设备. 但是,这会在连接USB设备时始终启动活动时产生不良影响.没有启动应用程序,我无法记住默认值.在连接上启动应用程序不是一个理想的效果.下面的小代码示例是 ...

  10. android 模拟来电广播,在Android模拟器上模拟来电

    最近项目要做一个控制来电显示的Android 应用 需要在Emulator上模拟来电 效果 方法如下: 1.单个电话 打开命令行cmd,输入telnet 回车. 然后输入 o localhost 55 ...

最新文章

  1. java两个jre_为什么会有两个jre?060925(原创)
  2. 文件服务器在哪里靠谱,vps作为文件服务器靠谱吗
  3. svn cleanup失败
  4. 技术点不亲身实验一遍,难免会被网文唬
  5. Date Picker控件:
  6. uniapp 创建与配置 tabbar
  7. 数据分析--使用Web API(应用编程接口)以自动请求GitHub网站的特定信息为例爬取数据,附完整的Python代码详解
  8. 图片服务 - thumbor可用的探测器
  9. 武汉将投放5亿元消费券,4月19日微信率先开抢
  10. linux中 在文件中写入一句话怎么写_shell文件处理笔记之插入文本到文件的方法...
  11. [导入]给老家新楼的对联
  12. Python学习入门基础教程(learning Python)--4.3 Python的for嵌套
  13. php期末考试题机考_phP基础知识期末考试题.doc
  14. GCP+WORDPRESS建站。
  15. 问题 J: 爱吃榴莲的LZY
  16. BLE设备地址类型笔记
  17. oracle调优总结 本文转自:http://blog.csdn.net/wonth/article/details/1670366
  18. MySQL 使用SQL语句实现 增删改查
  19. JAVA代码计算1900年到所求年份共多少天。
  20. Visio21 、Endnote X9.1、Endnote20、Endnote21、Endnote22、Latex 22安装破解版

热门文章

  1. 运用C语言指针知识实现对一个二维数组转置
  2. 「 神器 」快速启动应用Wox
  3. 计算机u盘打不开怎么办,电脑*u盘打不开怎么办
  4. R语言解读多元线性回归模型
  5. 飞腾D20008核桌面处理器
  6. C语言中文网_java复习进度
  7. C语言简单实现世界协调时UTC与北京时间BJT转换
  8. Alarm Clock Pro for mac(闹钟和时间管理工具)
  9. 修改进程的各种limits的方法
  10. 客户关系管理 期末复习