Search code examples
androidsettingsuriproviderringtone

Setting Ringtones Inside Android App


I would like the ability to set the systems ringtones from within my Android application. I face a slightly interesting issue because I never once in my code refer to the sounds directly, and instead am using a setup that refers to them via ints, so the code I have found online for this doesn't quite apply to me.

I'm not sure whether my code to set the ringtone is correct or not. It does replace my ringtone, but it never replaces it with the sound I ask it to. When I was using "Uri.parse" and giving it the path to find the correct file, it would replace the ringtone with nothing. Now, using "Uri.fromFile", and referring to the sound via a File, it replaces it with a typical telephone sound, which I assume is some sort of default.

I don't get any errors from this, but I do get one warning that seems relevant.

dataChanged but no participant pkg='com.android.providers.settings' uid=10096

It seems to me that I am just not referring to the file properly. I can get the path to the sound in a String, and of course define them as a File, but I must be missing something somewhere.

Any ideas are appreciated, thank you.

EDIT :: Well it seems that error only shows up when you "change the ringtone". So if I were to set the same sound as ringtone again, it would not show up, but if I were to set a different sound it would. To me this still means that it is seeing everything I am doing, but I am not referencing to the sound properly, so it doesn't know what to put there.

EDIT :: These are the main points of the errors I get when I try to use the same setup that is posted in other examples of settings ringtones.

These are when I first try to set it as a ringtone :

02-01 11:51:20.709: ERROR/MediaPlayerService(1157): Couldn't open fd for content://settings/system/ringtone

02-01 11:51:20.709: ERROR/MediaPlayer(13807): Unable to to create media player

02-01 11:51:20.709: ERROR/RingtoneManager(13807): Failed to open ringtone content://settings/system/ringtone

02-01 11:51:20.709: ERROR/MediaPlayer(13807): Unable to to create media player

02-01 11:51:20.716: WARN/Ringtone(13807): Couldn't set the stream type

02-01 11:51:20.716: WARN/Ringtone(13807): java.io.IOException: setDataSourceFD failed.: status=0x80000000

And this is if I go into my volume settings and change the volume of the ringtone :

02-01 11:51:23.568: ERROR/MediaPlayer(13807): Unable to to create media player

02-01 11:51:23.568: ERROR/Ringtone(13807): play() caught 

02-01 11:51:23.568: ERROR/Ringtone(13807): java.io.IOException: setDataSourceFD failed.: status=0x80000000

Solution

  • From your question I am not sure what are you using to change Ringtones. You can use

    android.media.RingtoneManager
    

    Several useful links:

    How to set ringtone in Android from my activity?

    setting audio file as Ringtone