20

I try to find solution here, but there are only solution for own/selected file, not for code when I call picker. I use following code when user press button:

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);

This show ringtone picker, user can choose what ringtone wants, but I miss two things: - it doesn´t show current ringtone when it open - it not save ringtone when it is clicked on OK


I still can´t find way how to open RINGTONE_PICKER with already selected current ring tone. Any idea?

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);
Lasse V. Karlsen
  • 380,855
  • 102
  • 628
  • 825
Michalsx
  • 3,446
  • 5
  • 33
  • 46

4 Answers4

21

You must implement onActivityResult() to receive result from user's pick, then save it.

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

Here an example: http://www.ceveni.com/2009/07/ringtone-picker-in-android-with-intent.html

EDIT: update

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

You must call this :)

Pete Houston
  • 14,931
  • 6
  • 47
  • 60
  • Thank you, but this is only how to catch path. But I don´t see way: - how to save this settings? - how to show current ringtone when it is open? – Michalsx Oct 06 '11 at 09:41
  • Dear Xjaphx : ) Thank you very much, you saved me : ) This code is working as I needed. – Michalsx Oct 06 '11 at 10:17
13
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);

"ringtone" is the uri in which I am saving the picked tone in 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;
        }
    }
}

Hope it helps you. Hit answered if it does.

biegleux
  • 13,179
  • 11
  • 45
  • 52
4

The code is perfect and works for me. But you forgot to mention the permissions required..here it is. try this code..hope it helps

<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>
Bala Vishnu
  • 2,588
  • 23
  • 20
  • On rooted device, you only need `android.permission.WRITE_SETTINGS` permission. Don't know about non-rooted devices, though. – ChuongPham Oct 14 '13 at 15:04
  • Oh! I didnt know that!! Thx for the info..Mine is unrooted..So I had to put all three to get it work – Bala Vishnu Oct 18 '13 at 20:30
4

This code will show default ringtone which the user sets earlier when ringtone picker is used.

Use below code in the button for ringtone intent.

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);
}
  • adding this line to code helped me `intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(strUri));` this line pass the existing `uri` to selector ` – Sagar Mar 15 '18 at 08:10