Getting a list of available Ringtones in Android

后端 未结 2 668

I\'ve seen plenty of examples of how to set a default ringtone, but what I\'m more interested in is being able populate a drop down box list filled with the available ringtones

相关标签:
2条回答
  • 2021-02-13 10:25

    This will return you the title and uri of all the ringtones available. Do with them what you wish!

    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;
    }
    
    0 讨论(0)
  • 2021-02-13 10:28

    RingtoneManager is what you are looking for. You just need to use setType to set TYPE_RINGTONE and then iterate over the Cursor provided by getCursor.

    This is a working example of an hypothetical method that returns an array of URIs, with the only slight difference that it's looking for alarms instead of ringtones:

    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;
    
    0 讨论(0)
提交回复
热议问题