Written against pre-release information
One of the new features coming with the next update to Windows Phone 7 is the ability to set custom ring tones. From within code you can make a ring tone available to a user (it's up to the user to accept the ring tone, so user settings won't ever be changed without user permission). I was looking at the new API for doing this, the
To use the API you first need to get the ringtone of interest into isolated storage. It can be either an MP3 file or a WMA file up to 30 seconds in length. If the file is a part of your application. Just set it's build type to "Resource".
Getting the file from being packed in the application to isolated storage is a matter of reading from a resource stream and writing to isolated storage.
using (var f = IsolatedStorageFile.GetUserStoreForApplication().CreateFile("1up.mp3"))
var buffer = new byte;
int bytesRead = 0;
bytesRead = s.Stream.Read(buffer, 0, 1024);
f.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
Once the file is in isolated storage you must pass the URL to the
SaveRingtoneTask(). URIs to isolated storage are preceded with "isostore:" (there is also an "appdata:" prefix, but we won't be using it here). Give the ringtone a display name and call the show method to present the user with the option to save it. If you don't set the
SaveRingtoneTask srt = new SaveRingtoneTask();
srt.DisplayName = "1up";
srt.IsoStore= new Uri("isostore:/1up.mp3", UriKind.Absolute);
srt.IsShareable = true;