async void ImgDownload_Click (object sender, EventArgs e)
{
var webClient=new WebClient();
var url=new Uri(stream_url_soundcloud);
byte[] bytes=null;
webClient.DownloadProgressChanged+= WebClient_DownloadProgressChanged;
dialog = new ProgressDialog (this);
dialog.SetProgressStyle (ProgressDialogStyle.Horizontal);
dialog.SetTitle("Downloading...");
dialog.SetCancelable (false);
//dialog.SetButton("Cancel",);
dialog.SetCanceledOnTouchOutside (false);
dialog.Show ();
try
{
bytes= await webClient.DownloadDataTaskAsync(url);
}
catch(TaskCanceledException)
{
Toast.MakeText(this,"Task Canceled!",ToastLength.Long);
return;
}
catch(Exception a)
{
Toast.MakeText(this,a.InnerException.Message,ToastLength.Long);
dialog.Progress=0;
return;
}
Java.IO.File documentsPath= new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic),"MusicDownloaded");
string localFilename = documentsPath + mListData[mPosition].track.title+".mp3";
//string localPath=System.IO.Path.Combine(documentsPath,localFilename);
Java.IO.File localPath=new Java.IO.File(documentsPath,localFilename);
dialog.SetTitle("Download Complete");
//Save the Mp3 using writeAsync
//FileStream fs=new FileStream(localPath,FileMode.OpenOrCreate);
OutputStream fs=new FileOutputStream(localPath);
await fs.WriteAsync (bytes, 0, bytes.Length);
fs.Close ();
dialog.Progress = 0;
}
void WebClient_DownloadProgressChanged (object sender, DownloadProgressChangedEventArgs e)
{
dialog.Progress = e.ProgressPercentage;
if (e.ProgressPercentage == 100) {
//dialog.Hide ();
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我在三星Galaxy上测试应用程序,但它在FIle.WriteAllBytes显示错误。 无法找到方向......
文件夹设备是MyAudio。这不是MyMusic。 - 我试图将mymusic替换为mydocument。它没有显示错误,但我等了大约3分钟,然后进入我的设备上的mydocument =&gt;看不到任何mp3文件。
答案 0 :(得分:2)
尝试与此类似的内容(使用DownloadFileTaskAsync
方法):
button.Click += async delegate
{
var destination = Path.Combine(
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.ApplicationData),
"music.mp3");
await new WebClient().DownloadFileTaskAsync(
new Uri("http://www.xyzmusic.com/music.mp3"),
destination);
};
答案 1 :(得分:1)
可能是路径问题? 我的位工作:
public async Task<string> SaveFilePublicStorage(string filename, byte[] fileBody)
{
var documentsPath = Android.OS.Environment.ExternalStorageDirectory + "/download/";
var filePath = Path.Combine(documentsPath, filename);
File.WriteAllBytes(filePath, fileBody);
return filePath;
}