Как получить имя для звонка в Android?

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

Пока код URI отлично работает:

Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

Но когда я пытаюсь получить заголовок и задаю его как текст кнопки, я ничего не получаю. Кажется, нет названия?

String title = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_TITLE);
button.setText(title);

Но мой текст кнопки пуст. Если я это сделаю:

button.setText(uri.toString());

тогда я вижу ури отлично. Должен ли я просто попытаться получить название из URI? Благодаря

Ответы

Ответ 1

Это должно получиться:

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

Обратитесь к http://developer.android.com/reference/android/media/Ringtone.html для документации, но рассказ: Ringtone.getTitle(Context ctx);

Ответ 2

У меня была серьезная проблема с производительностью, когда я пробовал принятый ответ, потребовалось около 2 секунд, чтобы загрузить список из 30 рингтонов. Я немного изменил его, и он работает примерно в 10 раз быстрее:

uri = ringtoneMgr.getRingtoneUri(cursor.getPosition());
ContentResolver cr = getContext().getContentResolver();
String[] projection = {MediaStore.MediaColumns.TITLE};
String title;
Cursor cur = cr.query(uri, projection, null, null, null);
    if (cur != null) {
        if (cur.moveToFirst()) {
            title = cur.getString(0);
            cur.close();

Ответ 3

У меня были проблемы с завершением MediaPlayer без его выпуска. Я использую это:

Cursor returnCursor = getContentResolver().query(uri, null, null, null, null);
returnCursor.moveToFirst();
String title = returnCursor.getString(returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
returnCursor.close();

Обратитесь к https://developer.android.com/training/secure-file-sharing/retrieve-info.html для документации.