废话:接了个加急项目,要求10天完成一个类似来电秀的APP,看来领导是很相信我的技术的,哈哈,(内心OS:尼玛,臣妾做不到),然鹅并没有什么用,还是想想如何实现吧
###项目步骤(技术难点拆分)
* 设置铃声
* 监听系统来电
* 系统权限获取
* 接听挂断电话

###设置铃声
设置铃声相对来说比较简单,系统提供了相应的API,获取音频文件的URl,调用RingtoneManager的setActualDefaultRingtoneUri方法就OK,代码如下

```
    public void setRingtoneImpl2(String path) {
        File chosenFile = new File(path);
        if (chosenFile == null) {
            LogUtils.e("file is null");
            return;
        }
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, chosenFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, chosenFile.getName());
        values.put(MediaStore.MediaColumns.SIZE, chosenFile.length());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, true);
        values.put(MediaStore.Audio.AudioColumns.IS_NOTIFICATION, false);
        values.put(MediaStore.Audio.AudioColumns.IS_ALARM, false);
        values.put(MediaStore.Audio.AudioColumns.IS_MUSIC, false);
        
        Uri uri = MediaStore.Audio.Media.getContentUriForPath(chosenFile.getAbsolutePath());
        mContext.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + chosenFile.getAbsolutePath() + "\"", null);
        Uri newUri = mContext.getContentResolver().insert(uri, values);
        try {
            RingtoneManager.setActualDefaultRingtoneUri(
                    mContext,
                    RingtoneManager.TYPE_RINGTONE,
                    newUri
            );

} catch (Exception e) {
            e.printStackTrace();
        }

}
```
哈哈,搞定,万事大吉,然鹅。。。。,还有双卡双待,设置不同sim卡的来电铃音。。。What????
###双卡设置不同的铃声
再次查看文档发现Google大佬就不支持双卡分别设置铃声,肿么办。。。。。。万般无奈还是从源码出发,看看能否发现些蛛丝马迹,查看setActualDefaultRingtoneUri方法源码
![截屏2020-01-16下午2.37.39.png](https://upload-images.jianshu.io/upload_images/6856454-91e41ade5deddefc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

发现源码是通过修改Setting中的值来修改铃声,那么修改卡2的铃声是否也可以通过这种方式呢?行不行试试就知道
####可以分为两步:
* 找到Setting的Key
* 通过修改系统Setting设置铃声

####查找Setting的Key
通过命令 adb shell getprop获取系统属性,查找与ring相关的属性,嘿嘿,惊喜来了,下面是华为手机的prop:
![截屏2020-01-16下午3.04.53.png](https://upload-images.jianshu.io/upload_images/6856454-163640b0102a8e4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

ringtone不就是系统铃声的Key值吗?因此可以推测下面的ringtone2就是卡2的Key,行不行试下就知道,直接上代码:

```    
    public void setRingtoneImpl2(String path) {
        File chosenFile = new File(path);
        if (chosenFile == null) {
            LogUtils.e("file is null");
            return;
        }
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, chosenFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, chosenFile.getName());
        values.put(MediaStore.MediaColumns.SIZE, chosenFile.length());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, true);
        values.put(MediaStore.Audio.AudioColumns.IS_NOTIFICATION, false);
        values.put(MediaStore.Audio.AudioColumns.IS_ALARM, false);
        values.put(MediaStore.Audio.AudioColumns.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(chosenFile.getAbsolutePath());
        mContext.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + chosenFile.getAbsolutePath() + "\"", null);

Uri newUri = mContext.getContentResolver().insert(uri, values);

try {
            RingtoneManager.setActualDefaultRingtoneUri(
                    mContext,
                    RingtoneManager.TYPE_RINGTONE,
                    newUri
            );
           //华为手机设置卡2
            Settings.System.putString(mContext.getContentResolver(), "ringtone2", newUri.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }

}
```

哈哈,运行成功,到此结束,设置铃声完美解决

Android来电秀应用相关推荐

  1. Android 来电秀总结

    前言 效果图 TODO 参考文章 实现思想 申请权限 静态权限 动态权限 监听电话 BroadcastReceiver +悬浮窗显示实现 InCallService + Activity实现 最后 该 ...

  2. android 来电秀 开源,自定义来电秀Demo

    [实例简介] 完全自定义界面的来电秀demo,以各种方式显示自定义界面.详情请看 http://blog.csdn.net/likebamboo/article/details/14449881 [实 ...

  3. Android 实现仿360来电秀的功能

    公司项目中需要实现当有电话进来时,在来电界面显示这个手机号码的一些信息. 需要解决两个问题: 1.悬浮窗的问题    2.后台服务保活的问题 悬浮窗需要在解锁的状态下弹出,在锁屏的状态下也需要弹出. ...

  4. Android之来电秀实现(一)

    简单的说下实现来电秀的大概原理流程:首先通过监听来电状态,通过拦截来电然后在窗口弹出一层系统级别的弹窗,这层弹窗即是来电秀. 先来两张效果图: 下面来说下实现,因为商用的原因,不能直接贴代码,所以在这 ...

  5. Android之来电秀实现(二)

    今天要说的主题是来电秀实现里面的电话接听与挂机,在这里我们需要用到ITelephony.aidl相关的一些文件, 如下图: 将如上文件导入到工程,去掉一些不需要的aidl关联,其中PhoneUtils ...

  6. android 通话状态监听(自定义接听挂断按钮与通话界面,根据公司的业务逻辑可以实现自己的来电秀功能)...

    前言: 因为公司需求,要自定义一款来电秀的app当做周边产品来配合主营的app业务. 之前因为赶项目,没时间整理这块,现在项目告一段落了,现在回头看看感觉这个功能还是挺有意思的,比较有针对性.电话呼入 ...

  7. android实现来电动画,华为来电动画app-华为来电动画(透明来电秀)安卓版-幻想游戏网...

    华为来电动画app是一款非常好用靠谱的手机来电动画设置应用软件平台,在华为来电动画这款应用软件平台里它汇集了海量的潮流炫彩主题素材,用户可以随意选择自己喜欢的来电动画设置,你还在等待什么?大家赶快来点 ...

  8. 手机来电秀怎么开启_360手机卫士怎么设置来电秀 360手机卫士来电秀设置方法...

    360手机卫士除了防护等安全功能外,它的来电秀也是比较火热的,很多朋友都喜欢在这里设置自己别具个性的来电秀,这篇文章就一起了解一下360手机卫士怎么设置来电秀. 360手机卫士来电秀设置是在[隐私保护 ...

  9. 瑞晟蓝牙来电语音软件下载_语音来电秀app下载-语音来电秀 安卓版v12.6-PC6安卓网...

    语音来电秀app是一款超级炫酷的语音来电显示秀的软件.语音来电秀app拥有各种类型的有点显示秀任大家挑选,快来语音来电秀app挑选一款你喜欢的来电秀作为你的来电显示吧! 软件介绍 语音来电秀app是一 ...

最新文章

  1. MYSQL体系结构-来自期刊
  2. SpringBoot+MySQL+MyBatis+Shiro+AdminLTE
  3. 【UWB】Savitzky Golay filter SG滤波器原理讲解
  4. 蚂蚁金服CTO程立:从Fintech到Techfin,未来十年有九大重要挑
  5. etcd和mysql_etcd和redis比较
  6. java——什么是浅表副本
  7. 【ORACLE 高可用】 高级复制的两个配置实例 - 使用高级复制和物化视图
  8. python实现将一个文件夹下的文件路径写入到指定的txt文件中
  9. 荣耀Magic4性能体验超苹果再次实锤!非官方游戏性能对比出炉
  10. hdu 1078 FatMouse and Cheese(记忆化搜索)
  11. 软件基本功:测试听着简单,会做的没几个
  12. AVI格式视频文件编码格式缺少编码解释器且该项目的编码格式不受支持(0xc00d5212错误)
  13. free、detele与野指针
  14. 【力扣·每日一题】507. 完美数 (C++ 模拟 数的因子)
  15. 电脑连接另一台电脑发出wifi时,显示ip4无访问权限,ip6无访问权限
  16. 成功真正需要什么:情商德商及体商 别高估智商
  17. 软件测试常见分辨率测试,兼容测试:常见的显示器分辨率
  18. “更新 TKK 失败,请检查网络连接” 解决方法
  19. 【语音识别】基于VQ特定人孤立词语音识别附matlab代码
  20. 知识图谱入门 (九) 知识问答

热门文章

  1. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结
  2. 变量访问遵循就近原则
  3. 【头歌】汉诺塔(Hanoi)的递归算法
  4. Unity3D : 腾讯云语音(GCloudVoice)的语音转文字功能
  5. Linux ls 只显示目录的方法
  6. X64dbg使用技巧
  7. 小希的迷宫 HDU - 1272---并查集+思维
  8. Excel 2010 SQL应用038 以数值范围为条件的查询
  9. chapter1——亚稳态的世界
  10. 现代文学作品选知识点整理