我已经看过很多关于如何设置默认铃声的例子,但我更感兴趣的是能够填充手机上可用铃声填充的下拉框列表。所以人们在Android设置中更改铃声时看到的列表,我希望能够列出所有这些。
我发现最接近的是here,但这只是用于设置默认铃声。任何人的想法?它可以在ringtonemanager之内或之外。
答案 0 :(得分:16)
RingtoneManager正是您要找的。您只需使用setType设置TYPE_RINGTONE,然后迭代getCursor提供的Cursor。
这是一个假设方法的工作示例,它返回一个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;
答案 1 :(得分:15)
这将返回所有铃声的标题和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;
}