Android 10铃声列表按照客户要求排序

本文介绍如何在Android 10系统中,根据用户需求对铃声列表进行排序。关键代码位于`MediaProvider`的`insertFile`和`updateInternal`方法,这两个方法分别在初始化设备和铃声列表变化时被调用。虽然代码简单易懂,但需要注意不同Android版本可能存在结构差异,例如在Android P中`isRingtone`为boolean类型,建议通过日志确认并适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在路径:\providers\MediaProvider\src\com\android\providers\media\MediaProvider.java

注意在insertFile和updateInternal方法里都要实现,因为在insertFile是初始化手机的时候调用,updateInternal是重启或者铃声列表发生变化的时候调用
代码我就不分析了,很简单,一看就明白

需要注意一点的是,不同平台不同Android系统的结构可能有点差异,比如boolean isRingtones = (isRingtone == null? false:(((int)isRingtone)==1));中isRingtone的类型在Android P上就是boolean型的,可以自己打log确认一下,再做调整。

//values.put("title_key", MediaStore.Audio.keyFor(so));
						Object isRingtone = values.get("is_ringtone");
						boolean isRingtones = (isRingtone == null? false:(((int)isRingtone)==1));
						Object isNotification = values.get("is_notification");
						boolean isNotifications = (isNotification == null? false:(((int)isNotification)==1));
						Object isAlarm = values.get("is_alarm");
						boolean isAlarms =  (isAlarm == null? false:(((int)isAlarm)==1));
						String sortTag = "\001";
						if(isRingtones){
							//TODO SET RINGTONE key_title
							switch (so) {
								case "lingsheng 1" :
								values.put("title_key",sortTag + "A");
								break;
								case "lingsheng 2" :
								values.put("title_key",sortTag + "B");
								break;
								case "lingsheng 3" :
								values.put("title_key",sortTag + "C");
								break;
								case "lingsheng 5" :
								values.put("title_key",sortTag + "D");
								break;
								case "lingsheng 6" :
								values.put("title_key",sortTag + "E");
								break;
								default:
								values.put("title_key", MediaStore.Audio.keyFor(so));
								break;
							}
						}else if(isNotifications){
							//TODO SET NOTIFICATION key_title
							switch (so) {
								case "Message 01" :
								values.put("title_key",sortTag + "A");
								break;
								case "Message 02" :
								values.put("title_key",sortTag + "B");
								break;
								case "Message 03" :
								values.put("title_key",sortTag + "C");
								break;
								case "Message 04" :
								values.put("title_key",sortTag + "D");
								break;
								default:
								values.put("title_key", MediaStore.Audio.keyFor(so));
								break;
							}
						}else if(isAlarms){
							//TODO SET alarm key_title
							switch (so) {
								case "Alarm_Clock" :
								values.put("title_key",sortTag + "A");
								break;
								default:
								values.put("title_key", MediaStore.Audio.keyFor(so));
								break;
							}
						}else {
							values.put("title_key", MediaStore.Audio.keyFor(so));
						}
				// do a final trim of the title, in case it started with the special
                // "sort first" character (ascii \001)
                values.put("title", so.trim());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值