清单权限要求

    <uses-permission android:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions" />

权限判断

Settings.System.canWrite(context)

权限设置

Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,Uri.parse("package:" + context.getPackageName()));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

uri 是铃声文件的uri,如 content://media/internal/audio/media/23
RingtoneManager 中
public static final int TYPE_RINGTONE = 1;
public static final int TYPE_NOTIFICATION = 2;
public static final int TYPE_ALARM = 4;
public static final int TYPE_ALL = TYPE_RINGTONE | TYPE_NOTIFICATION | TYPE_ALARM;

设置来电铃声

RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, uri);

设置通知提示音铃声

RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION, uri);

设置闹钟铃声(设置成功后,新建闹钟才是这个铃声,之前已创建的闹钟的铃声不会变)

RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_ALARM, uri);

直接调用系统的api,只能实现以上三种,但实际开发应用中会要求设置更多,比如来电铃声,要求设置卡2的来电铃声,要求设置短信铃声(信息铃声)等等
看源码可以发现,RingtoneManager.setActualDefaultRingtoneUri 实际上是调用以下方法,更改系统设置

String setting = getSettingForType(type);private static String getSettingForType(int type) {if ((type & TYPE_RINGTONE) != 0) {return Settings.System.RINGTONE;} else if ((type & TYPE_NOTIFICATION) != 0) {return Settings.System.NOTIFICATION_SOUND;} else if ((type & TYPE_ALARM) != 0) {return Settings.System.ALARM_ALERT;} else {return null;}}Settings.System.putStringForUser(resolver, setting,ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId());

那我们怎么知道要设置的功能对应的“setting”是什么呢?
cmd–adb 命令
adb shell settings list system
以华为手机为例,获取到以下信息(筛选部分展示)

alarm_alert=content://media/internal/audio/media/10
alarm_alert_path=/system/media/audio/alarms/Forest_Melody.ogg
calendar=content://media/internal/audio/media/26
calendar_path=/system/media/audio/notifications/Bongo.ogg
email=content://media/internal/audio/media/26
email_ai_translation=true
email_path=/system/media/audio/notifications/Bongo.ogg
enable_always_allow_mms=1
message=content://media/external/audio/media/20153
messageSub1=content://media/internal/audio/media/24
message_path=/storage/emulated/0/Music/cc_message.aac
notification_sound=content://0@media/external/audio/media/20153
notification_sound_path=/storage/emulated/0/Music/cc_message.aac
notification_sound_set=1
ringtone2=content://media/external/audio/media/9748
ringtone2_path=/storage/emulated/0/Music/laidian.aac
ringtone2_set=1
ringtone=content://0@media/external/audio/media/9748
ringtone_path=/storage/emulated/0/Music/laidian.aac
ringtone_set=1
.....

其中的 “alarm_alert”, “calendar”,“ringtone”,“ringtone2” 就是我们想要的

 //例如设置华为的卡2来电铃声boolean isSuccess;try {Settings.System.putString(context.getContentResolver(), "ringtone2", uri.toString());isSuccess = true;} catch (Exception e) {isSuccess = false;}Log.e("TAG",isSuccess?"设置成功":"设置失败");

同理,其他手机、其他的铃声设置,这里就不再提供了,大家自行获取相关信息哈。

注意点:
1,必须要先获取权限,不然会catch
2,Settings.System.putString 可能会有部分功能设置失败,应该是手机厂商对某些内容进行了限制,不让外部设置,主要要加 try catch
3,uri 要符合铃声媒体的要求

如果这篇文章对你有用,就点个赞或收藏下吧,没啥用,就好看,哈哈,当然,要打赏也很开心哈,哈哈哈哈~

设置来电铃声、卡2来电铃声、短信铃声、提示铃声、闹铃铃声相关推荐

  1. w ndows平板插sim卡,HUAWEI MateBookE怎么插入sim卡上网和接收短信?

    HUAWEI MateBook E 2019 产品为二合一的全连接平板电脑,除了可以通过常规的 Wi-Fi 方式联网之外,还可以插 SIM 卡进行上网.HUAWEI MateBook E 2019 支 ...

  2. 三星S7短信不能提示的处理方法

    三星S7 edge(包括绝大多数的三星手机)的短信的提示方式有两种: 1.弹出窗口:显示在窗口的最顶上(不是任务栏): 2.浮动窗口:通过在窗口上显示一个图标,然后又以弹窗形式显示(在高级设置里面). ...

  3. android之来电自动拒接并自动回复短信_上课模式app

    上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去. 当然了,需要权限的. 尝试做了个雏形出来. 界面如下: 主要代码如下: pac ...

  4. android开发之来电自动拒接并自动回复短信_上课模式app

    上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去. 当然了,需要权限的. 尝试做了个雏形出来. 界面如下: 主要代码如下: pac ...

  5. 开机设置卡1为发送短信的默认sim卡

    设置短信发送默认sim卡的位置为 framework/base/telephony/java/android/telephony/DefaultSmsSimSettings.java 在if(subI ...

  6. android 来电拒接_[置顶] android开发之来电自动拒接并自动回复短信_上课模式app...

    上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去. 当然了,需要权限的. 尝试做了个雏形出来. 界面如下: 主要代码如下: pac ...

  7. 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...

    华为手机短信提醒设置方法 1)检查当前设置的默认短信应用是哪个应用. ①点击桌面"设置"图标②找到"应用程序管理" ③选择"默认应用设置"④ ...

  8. android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉

    ​ 之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...

  9. Iphone5 语言设置成英文后如何发中文短信

    老革命遇到新问题: 由于工作环境关系, 我的手机语言一直设置成英文. 之前用过的iphone和其他手机,在需要发送短信时可以直接选择所要输入的语言. 看似很平常的要求,在Iphone5上却遇到了新情况 ...

  10. 手机号验证_国际手机号收不到微博验证短信,微博验证短信一直提示超过上限怎么办?...

    我花了一个多星期,终于把我用国外手机申请的微博号找回来了,不多说了,直接开始说方法好吧,分享给大家,只有在这种时候才知道我的智商. 首先我们的手机号不能接受到短信,其实很多时候并不是因为微博超限,而是 ...

最新文章

  1. “三板斧”式文化价值体系互助协作,打通企业全流程管理模式
  2. OSError: [WinError 126] 找不到指定的模块/Could not find 'cudart64_90.dll'.
  3. flask+sqlite3+echarts3+ajax 异步数据加载
  4. 使用Convirt 2.0.1管理虚拟机环境
  5. 文巾解题 17. 电话号码的字母组合
  6. 恒生java开发复试_2019恒生电子面试经验(JAVA开发人员,实施工程师等)
  7. php页面空白如何解决,php页面空白怎么回事 php出现空白页的解决方法
  8. datagrid获取页面总记录数的方法,datagrid获取页面总记录数为0的解决方法
  9. 在XML文件中定义动画(1)
  10. 野生前端的数据结构基础练习(5)——散列
  11. 【VBA】获取当前工作表的用户名
  12. unity如何得到所有子对象_Unity中获取多级子父节点的对象的两种方式
  13. 多次导入excel实现及excel导入逻辑插件清空数据
  14. 麻省理工18年春软件构造课程阅读08“可变性与不变性”
  15. QQ影音播放器 for Mac
  16. oracle 索引优化
  17. arduino代码_Arduino超声波传感器测距代码完全解析
  18. [音乐天堂]辛德勒名单原声大碟
  19. HTML禁用浏览器后退功能
  20. WIFI:802.11协议帧格式

热门文章

  1. Android 打造任意层级树形控件 考验你的数据结构和设计
  2. 用上周的作业:画一个太阳、地球、月亮的运动模型来剖析OpenGL中变换乃至整个绘制的秘密
  3. Vlan是什么?定义,特点超详细解析
  4. MIPS/RISC-V ALU设计
  5. 初中数学抽象教学的案例_初中数学教学案例分析-初中数学教学案例分析100例...
  6. 5G/NR: CQI 和MCS - 链路自适应,自适应编码
  7. web调用钉钉待办审批
  8. spring-boot2 + vue2+ element-ui2 + avue 通用架构 xijia-plus (兮家 plus)
  9. 【读书】兔兔西的已读书单
  10. Linux下和编译器、程序的运行、环境变量等相关的常见问题