我看到了很多设置默认铃声的例子,但我更感兴趣的是能够填充下拉框列表,并列出手机上可用的铃声。因此,当人们在Android设置中更改铃声时看到的列表,我想能够列出所有这些铃声。
我找到的最接近的东西是这里,但这只是用于设置默认铃声。有没有任何想法?它可以在ringtonemanager内或外。
我看到了很多设置默认铃声的例子,但我更感兴趣的是能够填充下拉框列表,并列出手机上可用的铃声。因此,当人们在Android设置中更改铃声时看到的列表,我想能够列出所有这些铃声。
我找到的最接近的东西是这里,但这只是用于设置默认铃声。有没有任何想法?它可以在ringtonemanager内或外。
这将返回所有可用铃声的标题和URI。您可以随心所欲地使用它们!
public Map<String, String> getNotifications() {
RingtoneManager manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_RINGTONE);
Cursor cursor = manager.getCursor();
Map<String, String> list = new HashMap<>();
while (cursor.moveToNext()) {
String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX);
String notificationUri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX) + "/" + cursor.getString(RingtoneManager.ID_COLUMN_INDEX);
list.put(notificationTitle, notificationUri);
}
return list;
}
RingtoneManager是您要寻找的内容。您只需要使用setType 设置为TYPE_RINGTONE ,然后遍历由getCursor 提供的游标。
这是一个可行的示例方法,它返回一个URI数组,唯一的轻微差别是它查找的是闹钟而不是铃声:
RingtoneManager ringtoneMgr = new RingtoneManager(this);
ringtoneMgr.setType(RingtoneManager.TYPE_ALARM);
Cursor alarmsCursor = ringtoneMgr.getCursor();
int alarmsCount = alarmsCursor.getCount();
if (alarmsCount == 0 && !alarmsCursor.moveToFirst()) {
return null;
}
Uri[] alarms = new Uri[alarmsCount];
while(!alarmsCursor.isAfterLast() && alarmsCursor.moveToNext()) {
int currentPosition = alarmsCursor.getPosition();
alarms[currentPosition] = ringtoneMgr.getRingtoneUri(currentPosition);
}
alarmsCursor.close();
return alarms;
StaleDataException
(尝试在关闭游标后访问游标)。不关闭游标似乎可以解决它——我猜想 RingtoneManager
返回的是一个受管理的游标? - efloricogetCursor
文档 说明:返回的游标将是每次调用此方法时返回的相同游标,因此不要关闭(close())游标。游标可以安全地被deactivate()。如果没有使用RingtoneManager(Activity),则调用者应通过其活动的生命周期来管理返回的游标,以防止泄漏游标。 - user650881Ringtone r = RingtoneManager.getRingtone(this, ringtoneURI) String ringToneName = r.getTitle(this)
在OPPO上我没有得到真实的名称 - Sagarrm.getRingtone(rmCursor.position).getTitle(context)
- olfek