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 SaveRingtonTask()
.
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 its 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.
var
s =
Application.GetResourceStream(new Uri("/MyApplicationName;component/1up.mp3",
UriKind.Relative));
{
using (var f = IsolatedStorageFile.GetUserStoreForApplication().CreateFile("1up.mp3"))
{
var buffer = new byte[2048];
int bytesRead = 0;
do
{
bytesRead = s.Stream.Read(buffer, 0, 1024);
f.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
f.Close();
}
}
Once the file is in Isolated Storage, you must pass the URL to 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.
SaveRingtoneTask srt = new SaveRingtoneTask();
srt.DisplayName = "1up";
srt.IsoStore= new Uri("isostore:/1up.mp3", UriKind.Absolute);
srt.IsShareable = true;
srt.Show();