前言
         欢迎大家我分享和推荐好用的代码段~~
声明
         欢迎转载,但请保留文章原始出处:
         
CSDN:http://www.csdn.net
         雨季o莫忧离:http://blog.csdn.net/luckkof

正文

背景:
原始设计语音来电铃声和视频来电铃声是一起设置的。 即设置的默认铃声同时是语音来电和视频来电的铃声。
 
需求:
只想单独设置视频来电的默认铃声。
 
实现思路:
参考原先来电铃声的设置机制,给视频来电铃声单独设置属性写默认的铃声名称,然后在文件扫描时,判断扫描到的文件是设置的默认视频铃声的文件名,则在database中填写视频来电的键值为此铃声;
 
PS:被设置的铃声首先要存在于系统中,关于如何添加系统铃声请参考”FAQ06323[Audio Profile]如何添加以及删减特定的默认通知铃声,如何设置默认铃声”;
 
1,添加Video Call默认铃声的属性:
alps\build\target\product\core.mk中添加“ro.config.video_call”:

PRODUCT_PROPERTY_OVERRIDES := \
    ro.config.notification_sound=Proxima.ogg \
    ro.config.alarm_alert=Alarm_Classic.ogg \
    ro.config.ringtone=Backroad.ogg \
     ro.config.video_call=VideocallRt.ogg

 
2,添加对扫描到文件的判断是否是默认Vide Call的默认铃声:
alps\frameworks\base\media\java\android\media\mediascanner.java:

1),添加成员变量用做后面的判断:
private String mDefaultRingtoneFilename;
private String mDefaultVideocallFilename;
private boolean mDefaultRingtoneSet;
private boolean mDefaultVideoCallSet;
private static final String RINGTONE_SET = "ringtone_set";
private static final String VIDEOCALL_SET = "videocall_set";

2):添加读取video call默认铃声的系统属性:
private void setDefaultRingtoneFileNames() {
        mDefaultRingtoneFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.RINGTONE);
         mDefaultVideocallFilename = SystemProperties.get(DEFAULT_RINGTONE_PROPERTY_PREFIX
                + Settings.System.VIDEO_CALL);//add this line
...
    }
3):添加对扫描到的文件是否是视频来电默认铃声的判断:
参考标有//start modify”和//end modify”中间包含的为添加整段code,"//add this line"和”Modify this line"为添加添加的语句和修改的语句。
并请留意“else if (ringtones && doesSettingEmpty(RINGTONE_SET)&&!videocall) {”中要一定注释掉对VideoCall的设置:

private Uri endFile(){
        boolean videocall = false; //add this line
.....
 if (notifications &&((mWasEmptyPriorToScan && !mDefaultNotificationSet) ||
                        doesSettingEmpty(NOTIFICATION_SET))) {
                                ....   
//start modify
} else if(ringtones && ((mWasEmptyPriorToScan && (!mDefaultRingtoneSet||!mDefaultVideoCallSet)) || doesSettingEmpty(RINGTONE_SET)|| doesSettingEmpty(VIDEOCALL_SET))) {
                    if (TextUtils.isEmpty(mDefaultRingtoneFilename) ||
                            doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) {
                        needToSetSettings = true;
                        /// M: Adds log to debug setting ringtones.
                        Xlog.v(TAG, "endFile: needToSetRingtone=true.");
                    }
                    if (TextUtils.isEmpty(mDefaultVideocallFilename) ||
                            doesPathHaveFilename(entry.mPath, mDefaultVideocallFilename)) {
                        needToSetSettings = true;
                        videocall = true;
                        /// M: Adds log to debug setting ringtones.
                        Xlog.v(TAG, "endFile: needToSetRingtone=true.");
                    }

                }  else if (alarms && ((mWasEmptyPriorToScan && !mDefaultAlarmSet) ||
                        doesSettingEmpty(ALARM_SET))) {
                      ...                   
}
 
...
if(needToSetSettings) {
                if (notifications && doesSettingEmpty(NOTIFICATION_SET)) {
                  .....
//start modify
                 } else if (ringtones && (doesSettingEmpty(RINGTONE_SET)||doesSettingEmpty(VIDEOCALL_SET)) {
                    if(videocall){
setSettingIfNotSet(Settings.System.VIDEO_CALL, tableUri, rowId);

                    setProfileSettings(RingtoneManager.TYPE_VIDEO_CALL, tableUri, rowId);
                    mDefaultVideoCallSet = true;
                    setSettingFlag(VIDEOCALL_SET);
}
else{
                    setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId);
                    // setSettingIfNotSet(Settings.System.VIDEO_CALL, tableUri, rowId); //modify this line
                    setSettingIfNotSet(Settings.System.SIP_CALL, tableUri, rowId);
                    setProfileSettings(RingtoneManager.TYPE_RINGTONE, tableUri, rowId);
                    // setProfileSettings(RingtoneManager.TYPE_VIDEO_CALL, tableUri, rowId);//modify this line
                    setProfileSettings(RingtoneManager.TYPE_SIP_CALL, tableUri, rowId);
                    mDefaultRingtoneSet = true;
                    setSettingFlag(RINGTONE_SET);
}

                    Xlog.v(TAG, "endFile: set ringtone. uri=" + tableUri + ", rowId=" + rowId);
//end modify
                }else if (alarms && doesSettingEmpty(ALARM_SET)) {
                   ....
            }
 

Android 如何设置视频来电的默认铃声相关推荐

  1. Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声

    Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声 一.Android来电铃声默认设置的实现方法 Andoird默认来电铃声的设置方法为修改build/target/product/ ...

  2. 手机来电秀怎么开启_华为手机怎么设置视频来电秀?原来方法这么简单,手把手教你设置...

    原标题:华为手机怎么设置视频来电秀?原来方法这么简单,手把手教你设置 前几天有个使用华为手机的网友问小编,下载什么软件可以将视频设置成来电铃声.其实华为手机自身就携带了视频来电秀功能,并不用下载第三方 ...

  3. Android中设置自己应用为默认打开

    比如通过文档查看器打开一个文本文件时,会弹出一个可用来打开的软件列表: 如何让自己的软件也出现在该列表中呢? 通过设置 Android Manifest.xml文件即可: <activity a ...

  4. android 代码设置居右_AppCompatSpinner默认值、默认选中、更改右侧箭头颜色、选项变化监听、文本居中显示...

    1.在代码中设置spinner默认值 spinner.setSelection(2,true); 就这样一行代码,很重要 一定要加true. 2.根据值设置spinner默认选中 /** 根据值, 设 ...

  5. 设置双卡不同的来电默认铃声

    文章目录 需求具体描述 客制化 双卡铃音功能实现 适用于Android L及之后的版本 需求具体描述 可以分别设置双卡sim1,sim2的来电默认铃声 客制化 双卡铃音功能实现 1. alps/bui ...

  6. android 5.0 设置铃声,android5.0联系人铃声设置和来电读取分析

    android5.0联系人铃声设置和来电读取 一,单个联系人的铃声设置流程 1,联系人编辑界面下菜单设置来电铃声,会弹出一个ringtone列表供用户选择. 从ContactEditorFragmen ...

  7. 华为手机设置页面黑色_华为手机能将视频设置成来电铃声!原来方法这么简单,学到了...

    华为手机能将视频设置成来电铃声!原来方法这么简单,学到了 华为手机一直受到大家喜爱,因为里面的黑科技功能较多. 那么今天就来带大家了解一下,华为自带的来电秀功能,可以将手机视频设置成来电铃声,好看又有 ...

  8. android 设置默认铃声,Android系统修改默认铃声

    Andriod手机的铃声默认保存在system/media/audio/下面,有四个文件夹,分别是alarms,notifications,ringtones,ui.对应闹钟.通知.铃声.UI音效.r ...

  9. android微信电话连续铃声,还在用Android微信默认铃声?1分钟教你设置个性铃声

    微信已经成为大家日常生活中不可缺少的部分.大家有没有遇到一种尴尬?匆忙拿起手机,却发现不是自己的微信消息.小编今天就来教教大家如何设置一个个性化的微信提示音. 1.登陆自己的微信之后,点击首页的&qu ...

最新文章

  1. java 分析jstack日志_望闻问切使用jstack和jmap剖析java进程各种疑难杂症
  2. bean ref的bean可以做判断吗_Spring Boot @Condition 注解,组合条件你知道吗
  3. linux df 目录大小,Linux命令du df查看文件和文件夹大小
  4. 微信小程序验证车牌号(含新能源车牌)
  5. 【PySpark入门】手把手实现PySpark机器学习项目-回归算法
  6. MFC和QT等UI框架的特点
  7. MVC安全:ajax表单提交切记加上AntiForgeryToken防止跨站请求伪造 (CSRF)攻击
  8. 一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
  9. parent.window php,javascript中的window.self、window.top、window.parent和window.opener详解
  10. 递归算法,如何把list中父子类对象递归成树
  11. Java递归算法要点
  12. 时间一天天过去,好像什么都没变。
  13. 分享一种免费的.FLV格式视频转.MP4的方法,方便高效且不用迅捷转换器。。。
  14. cps linux命令,Linux基本网络及文件传输命令
  15. 理性讨论:字节跳动跟阿里,哪个环境更适合年轻人?
  16. cometd java_Jetty cometd(Continuation)学习笔记
  17. UnityStandardAsset工程、源码分析_2_赛车游戏[玩家控制]_车辆核心控制
  18. 西米支付:数字人民币常识普及
  19. python实现人脸识别系统设计_基于ROS的人脸识别系统设计与实现
  20. java生成二维码以及二维码的解码

热门文章

  1. Android Suspend
  2. 树种统计 (20分)
  3. qW3xT.5 记一次解决挖矿病毒
  4. 计算机网络问答题(1)
  5. 钢化膜全覆盖非全覆盖的区别_什么是3D全覆盖钢化膜,为什么大家都在用?
  6. 管理员工工作微信小技巧
  7. Cross Apply的用法
  8. php sigpipe,遭遇SIGPIPE[转]
  9. SIGPIPE信号的产生及处理
  10. html如何设置自动对齐,HTML5 教程之CSS 水平对齐(Horizontal Align)