Получение списка доступных рингтонов в Android - PullRequest
11 голосов
/ 22 августа 2011

Я видел множество примеров того, как установить мелодию по умолчанию, но больше всего меня интересует возможность заполнить выпадающий список, заполненный доступными мелодиями на телефоне.Итак, список, который люди видят, когда они меняют свою мелодию звонка в настройках Android, я хочу иметь возможность перечислить все из них.

Самое близкое, что я нашел, это здесь , ноопять же это просто для установки мелодии по умолчанию.Любые идеи кто-нибудь?Может быть в или из RingtoneManager.

Ответы [ 2 ]

16 голосов
/ 25 сентября 2012

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;
15 голосов
/ 17 апреля 2015

Это вернет вам название и 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;
}
...