获取Android中可用的铃声列表

时间:2011-08-22 16:55:41

标签: android audio drop-down-menu ringtone

我已经看过很多关于如何设置默认铃声的例子,但我更感兴趣的是能够填充手机上可用铃声填充的下拉框列表。所以人们在Android设置中更改铃声时看到的列表,我希望能够列出所有这些。

我发现最接近的是here,但这只是用于设置默认铃声。任何人的想法?它可以在ringtonemanager之内或之外。

2 个答案:

答案 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;
}