Диалог выбора рингтона (Ringtone Picker Dialog)

Что-то как-то маловато информации на русском на эту тему. Запишу и систематизирую немного. Итак. Как показать диалог для выбора рингтона/мелодии? Очень просто. Создать Intent с определенными параметрами и вызвать startActivityForResult:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Выберите рингтон:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
startActivityForResult(intent, 111);

Параметры диалога передаются через этот же Intent с помощью дополнительных полей: putExtra(Параметр, значение). В примере выше задаются 4 параметра диалога.

Опишу некоторые параметры, которые могут пригодиться:

RingtoneManager.EXTRA_RINGTONE_TITLE, значение: строка. — Заголовок диалога, тут думаю все ясно.

RingtoneManager.EXTRA_RINGTONE_TYPE, значения: TYPE_RINGTONE, TYPE_NOTIFICATION, TYPE_ALARM, or TYPE_ALL. Указывает, звуки какого типа будет показывать диалог: рингтоны, уведомления, будильники или все что есть. Можно комбинировать по OR, например TYPE_NOTIFICATION | TYPE_ALARM.

RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, значение: булево. — Если указать true — в списке мелодий будет пункт «Без звука». В этом случае, при выборе этого пункта, диалог вернет null

RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, значение: булево. — Если указать true — в списке мелодий будет пункт «Рингтон по умолчанию».

RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, значение: URI — передает диалогу URI мелодии, которая будет показана пользователю как «Рингтон по умолчанию»

RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, значение: URI — передает диалогу URI мелодии, которая будет отмечена, когда покажется диалог. Если в диалоге используется пункт «Рингтон по умолчанию», то вместо URI можно передать DEFAULT_RINGTONE_URI, DEFAULT_NOTIFICATION_URI, или DEFAULT_ALARM_ALERT_URI — тогда этот элемент будет отмечен как «Рингтон по умолчанию».

С параметрами всё. Как же получить ответ? Да тоже просто. С помощью onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 111 && resultCode == RESULT_OK) {
        Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if (uri != null) {
            // uri теперь содержит выбранный нами звук, точнее его адрес.
            String ringTonePath = uri.toString(); 
        }
    }
}

т.е. ответ диалога передается ответным Intent, в качестве ParcelableExtra RingtoneManager.EXTRA_RINGTONE_PICKED_URI.

Нам возвращается URI рингтона. Из него можно получить только путь. Однако пользователю путь показывать дурной тон, ему подавай имя рингтона. Его из URI напрямую не получишь. Но можно сделать так:

Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
String title = ringtone.getTitle(this);

Все просто!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *