我想从手机上的链接(隔离存储)下载一个 mp3 文件,然后将其另存为铃声。
但是我的代码不能正常工作......它给了我一个错误:
System.InvalidOperationException: Path must point to a file in your Isolated Storage or Application Data directory.
我这样调用函数:
private void getRingtone_Click(object sender, EventArgs e)
{
ringtone = new Ringtone();
ringtone.DownloadFile(GlobalVariables.Url, GlobalVariables.filename);
//ringtone.SaveRingtone();
}
Globalvariables Url 就像:www.example.com/mp3/M/myfile.dmf.mp3 (如果您需要测试,我可以给您我的真实网址)
文件名如下:myfile.dmf.mp3
这是在铃声类中:
WebClient _webClient; // Used for downloading mp3
private bool _playSoundAfterDownload;
MediaElement mediaSound;
SaveRingtoneTask saveRingtoneChooser;
public void DownloadFile(string uri, string filename)
{
_webClient = new WebClient();
saveRingtoneChooser = new SaveRingtoneTask();
saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(saveRingtoneChooser_Completed);
_webClient.OpenReadCompleted += (s1, e1) =>
{
if (e1.Error == null)
{
try
{
string fileName = GlobalVariables.filename;
bool isSpaceAvailable = IsSpaceIsAvailable(e1.Result.Length);
if (isSpaceAvailable)
{
// Save mp3 to Isolated Storage
using (var isfs = new IsolatedStorageFileStream(fileName,
FileMode.CreateNew,
IsolatedStorageFile.GetUserStoreForApplication()))
{
long fileLen = e1.Result.Length;
byte[] b = new byte[fileLen];
e1.Result.Read(b, 0, b.Length);
isfs.Write(b, 0, b.Length);
isfs.Flush();
}
if (_playSoundAfterDownload)
{
_playSoundAfterDownload = false;
SaveRingtone();
}
}
else
{
MessageBox.Show("Not enough to save space available to download mp3.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show(e1.Error.Message);
}
};
SaveRingtone();
}
// Check to make sure there are enough space available on the phone
// in order to save the image that we are downloading on to the phone
private bool IsSpaceIsAvailable(long spaceReq)
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
long spaceAvail = store.AvailableFreeSpace;
if (spaceReq > spaceAvail)
{
return false;
}
return true;
}
}
我做了这个例子:http ://blog.toetapz.com/2010/11/29/how-to-download-and-save-mp3-to-isolatedstorage/
剩下的是安全铃声部分。当我将 mp3 直接添加到我的项目并使用代码的 appdata:xyz.mp3 部分时,这可以工作。
private void SaveRingtone()
{
try
{
//saveRingtoneChooser.Source = new Uri("appdata:/myTone.wma");
saveRingtoneChooser.Source = new Uri("isostore:/"+GlobalVariables.filename);
saveRingtoneChooser.DisplayName = "My custom ringtone";
saveRingtoneChooser.Show();
}
catch (System.InvalidOperationException ex)
{
MessageBox.Show("An error occurred."); //Error appears here.
}
}
void saveRingtoneChooser_Completed(object sender, TaskEventArgs e)
{
switch (e.TaskResult)
{
//Logic for when the ringtone was saved successfully
case TaskResult.OK:
MessageBox.Show("Ringtone saved.");
break;
//Logic for when the task was cancelled by the user
case TaskResult.Cancel:
MessageBox.Show("Save cancelled.");
break;
//Logic for when the ringtone could not be saved
case TaskResult.None:
MessageBox.Show("Ringtone could not be saved.");
break;
}
}
}
我希望我的问题是可以理解的。谢谢。