Это метод, который я использую, чтобы получить список звуков уведомлений, доступных в телефоне :)
public Map<String, String> getNotifications() {
RingtoneManager manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
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);
list.put(notificationTitle, notificationUri);
}
return list;
}
РЕДАКТИРОВАТЬ: Это для комментария относительно того, как установить звук в NotificationCompat.Builder. Вместо этого этот метод получает идентификатор мелодии звонка, который используется телефоном, вместо удобочитаемого для человека названия, полученного другим методом. Объедините uri и id, и у вас будет расположение рингтонов.
public ArrayList<String> getNotificationSounds() {
RingtoneManager manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
ArrayList<String> list = new ArrayList<>();
while (cursor.moveToNext()) {
String id = cursor.getString(RingtoneManager.ID_COLUMN_INDEX);
String uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);
list.add(uri + "/" + id);
}
return list;
}
Приведенный выше код вернет список строк, таких как "content: // media / internal / audio / media / 27" .. затем вы можете передать одну из этих строк как Uri в. setSound () как:
.setSound(Uri.parse("content://media/internal/audio/media/27"))
Надеюсь, это было достаточно ясно:)