Как установить рингтон с помощью RingtoneManager.ACTION_RINGTONE_PICKER?

Я пытаюсь найти решение здесь, но есть решение только для собственного/выбранного файла, а не для кода, когда я вызываю средство выбора. Я использую следующий код, когда пользователь нажимает кнопку:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
ActivityCurrent.this.startActivityForResult(intent,999);

Это средство выбора мелодии звонка, пользователь может выбрать, какую мелодию звонка хочет, но мне не хватает двух вещей: - он не показывает текущую мелодию при открытии - он не сохраняет мелодию при нажатии на кнопку «ОК».


Я до сих пор не могу найти способ открыть RINGTONE_PICKER с уже выбранной текущей мелодией звонка. Есть идеи?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
ActivityCurrent.this.startActivityForResult(intent,999);

person Michalsx    schedule 06.10.2011    source источник


Ответы (4)


Вы должны реализовать onActivityResult(), чтобы получить результат от выбора пользователя, а затем сохранить его.

if (resultCode == RESULT_OK) {
    Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
    if (uri != null) {
    String ringTonePath = uri.toString();
}

Вот пример: http://www.ceveni.com/2009/07/ringtone-picker-in-android-with-intent.html

РЕДАКТИРОВАТЬ: обновить

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity,
    RingtoneManager.TYPE_RINGTONE,
    uri);

Вы должны назвать это :)

person Pete Houston    schedule 06.10.2011
comment
Спасибо, но это только как поймать путь. Но я не вижу выхода: - как сохранить эти настройки? - как показать текущий рингтон, когда он открыт? - person Michalsx; 06.10.2011
comment
Уважаемый Xjaphx :) Большое спасибо, вы меня спасли :) Этот код работает так, как мне нужно. - person Michalsx; 06.10.2011

Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone);
startActivityForResult(intent , 1);

«рингтон» — это uri, в котором я сохраняю выбранный тон в onActivityResult().

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case 1:
            ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

            // Toast.makeText(getBaseContext(),RingtoneManager.URI_COLUMN_INDEX,
            // Toast.LENGTH_SHORT).show();
            break;

        default:
            break;
        }
    }
}

Надеюсь, это поможет вам. Хит ответил, если это так.

person Muhammad Shahnawaz    schedule 15.08.2012
comment
Спасибо. Это работает. Но если мы добавим наш исходный файл uri в RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, то выбор времени для звука по умолчанию не будет выбран после повторного открытия средства выбора мелодии звонка. - person Vishal Patoliya ツ; 08.11.2017
comment
не могли бы вы сказать мне - person Vishal Patoliya ツ; 08.11.2017

Код идеален и работает для меня. Но вы забыли упомянуть о необходимых разрешениях .. вот они. попробуйте этот код .. надеюсь, это поможет

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission>
  <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission>
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission>
person Bala Vishnu    schedule 13.06.2013
comment
На корневом устройстве вам нужно только разрешение android.permission.WRITE_SETTINGS. Однако не знаю о нерутированных устройствах. - person ChuongPham; 14.10.2013
comment
Ой! я этого не знала!! Спасибо за информацию .. У меня нет рута .. Поэтому мне пришлось поставить все три, чтобы заставить его работать - person Bala Vishnu; 19.10.2013

Этот код покажет мелодию звонка по умолчанию, которую пользователь установил ранее при использовании средства выбора рингтона.

Используйте приведенный ниже код в кнопке для мелодии звонка.

public void pickRingtone(View view) {
        // TODO Auto-generated method.   stub

        Intent intent = new.       Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
                RingtoneManager.TYPE_RINGTONE);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");

    // for existing ringtone
        Uri urie =     RingtoneManager.getActualDefaultRingtoneUri(
                getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie);

    startActivityForResult(intent, 5);
}
person Alexander The Great    schedule 11.04.2014
comment
добавление этой строки в код помогло мне intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(strUri)); эта строка передать существующий uri в селектор ` - person Sagar; 15.03.2018