设置来电铃声、卡2来电铃声、短信铃声、提示铃声、闹铃铃声

news/2025/2/12 23:51:05/

清单权限要求

    <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 要符合铃声媒体的要求

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


http://www.ppmy.cn/news/583058.html

相关文章

如何在 Android 上自定义来电通知?带有代码示例

您将从本文中学习如何在 Android 上进行从基本布局到高级布局的来电通知。使用我们的示例自定义通知屏幕。 今天&#xff0c;我们将处理来电通知&#xff1a;我们将从最简单和最简约的通知开始&#xff0c;并以采用非系统设计的全屏通知结束。让我们开始吧&#xff01; 频道创…

iOS中如何监测来电

问题 最近在做一个有录音功能的App&#xff0c;要求当用户接到来电时&#xff0c;要停止录音。该如何实现这个功能呢&#xff1f; 解决方案 我首先想到了AppDelegate里的applicationWillResignActive:方法&#xff0c;在该方法的注释中就写到到收到来电或短信时&#xff0c;…

寻找两个正序数组的中位数,js实现

寻找两个正序数组的中位数&#xff0c;js实现 题目描述思路分析算法 题目描述 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 实例1&#xff1a; …

INTERSPEECH 2023论文|基于自监督学习表示的具有持久性口音记忆的口音识别

论文题目&#xff1a; Self-supervised Learning Representation based Accent Recognition with Persistent Accent Memory 作者列表&#xff1a; 李睿&#xff0c;谢志伟&#xff0c;徐海华&#xff0c;彭亦周&#xff0c;刘和鑫&#xff0c;黄浩&#xff0c;Chng Eng Sio…

Open ai 开发指南:gpt接口的第一个问答机器人demo

目录 内容 Python代码 C 代码 workspace 文件 BUILD文件 Java 代码 maven文件 执行效果 内容 基于openai接口实现循环gpt问答&#xff0c;并使用一个文件将问答内容进行记录。 Python代码 # -*- coding: utf-8 -*- import openai import time from pathlib import P…

Android13 安装最新版 Frida

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰&#xff0c;更不会影响计算机信息系统的正常运行。不得将代码用于非法用途&#xff0c;如侵立删&#xff01; Android13 安装最新版 Frida 环境 win10Pixel4Android13Python3.9Frida1…

计算机主机箱进行总结,工业级主机用机箱分类总结

原标题&#xff1a;工业级主机用机箱分类总结 由于工业控制计算机的应用环境不同&#xff0c;从机箱的组成上可以分为多种。这也是工业控制计算机的一个主要特点&#xff01;在工业控制计算机的整个组成中&#xff0c;工业级机箱的重要性仍然是相当大的&#xff0c;那么工业级机…

1u服务器系统风扇,1U工控服务器机箱介绍

原标题&#xff1a;1U工控服务器机箱介绍 随着服务器的集成度越来越高&#xff0c;像INTEL的XEON刀片服务器(其广告随处可见)和1U服务器等大量的普及使用&#xff0c;并且国内的服务器市场逐步升温服务器的情况下。服务器散热受到散热器厂商和服务器用户的高度重视&#xff0c;…