获取Android中可用的铃声列表

use*_*244 12 audio android ringtone drop-down-menu

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

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

Mur*_*ro2 18

这将返回所有铃声的标题和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;
}
Run Code Online (Sandbox Code Playgroud)

  • 要获得正确的铃声uri,您需要添加cursor.getString(RingtoneManager.ID_COLUMN_INDEX))的值.所以它将是Uri uri = Uri.parse(notificationUri +"/"+ cursor.getString(RingtoneManager.ID_COLUMN_INDEX)).之后,您可以通过RingtoneManager.getRingtone(上下文,uri)获取铃声并播放它,例如. (5认同)

Die*_*ego 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;
Run Code Online (Sandbox Code Playgroud)