失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 设置来电铃声 卡2来电铃声 短信铃声 提示铃声 闹铃铃声

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

时间:2024-03-17 07:57:08

相关推荐

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

清单权限要求

<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/10alarm_alert_path=/system/media/audio/alarms/Forest_Melody.oggcalendar=content://media/internal/audio/media/26calendar_path=/system/media/audio/notifications/Bongo.oggemail=content://media/internal/audio/media/26email_ai_translation=trueemail_path=/system/media/audio/notifications/Bongo.oggenable_always_allow_mms=1message=content://media/external/audio/media/3messageSub1=content://media/internal/audio/media/24message_path=/storage/emulated/0/Music/cc_message.aacnotification_sound=content://0@media/external/audio/media/3notification_sound_path=/storage/emulated/0/Music/cc_message.aacnotification_sound_set=1ringtone2=content://media/external/audio/media/9748ringtone2_path=/storage/emulated/0/Music/laidian.aacringtone2_set=1ringtone=content://0@media/external/audio/media/9748ringtone_path=/storage/emulated/0/Music/laidian.aacringtone_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来电铃声 短信铃声 提示铃声 闹铃铃声》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。