WindowsPhone 8 如何下载网络音频到独立存储空间中后台播放
来源:互联网 发布:淘宝钻石买家有什么用 编辑:程序博客网 时间:2024/05/19 09:51
本文阐述如何在WindowsPhone 8 中下载网络音频,并保存到独立存储空间中。实现在无网络的情况下能够后台播放此音频文件。
直接进入主题:
1、新建解决方案:PlayIsolatedStorageMusicDemo。
2、在解决方案中添加一个“WindowPhone音频播放代理”项目:MyAudioPlaybackAgent
3、在项目“PlayIsolatedStorageMusicDemo”中添加对项目“MyAudioPlaybackAgent”的引用
解决方案资源管理器目录结构如图所示:
4、在MainPage.xaml文件中进行简单布局,未下载完成前“移动”和“播放”按钮不可用;使用一个ProgressBar显示下载进度(由于只是个简单的
Demo,所以这里的XAML页面布局就简单一点),如图
5、下载按钮添加DownLoad_Click事件:
private BackgroundTransferRequest _request; private string downloadPath; private void DownLoad_Click(object sender, RoutedEventArgs e) { // 传输的文件网络路径 Uri requestUri; try { requestUri = new Uri(fileUrl.Text, UriKind.RelativeOrAbsolute); } catch { MessageBox.Show("文件地址不符合格式"); return; } //设置文件下载地址 downloadPath = string.Format("shared/transfers/{0}.mp3", Guid.NewGuid()); //创建一个后台文件传输请求 _request = new BackgroundTransferRequest( requestUri) { Method = "GET",// 设置传输的方法为GET请求 DownloadLocation = new Uri(downloadPath, UriKind.Relative), Tag = "something else", //添加请求的Tag属性,Tag属性不能超过4000个字符 TransferPreferences = TransferPreferences.AllowBattery }; _request.TransferStatusChanged += _request_TransferStatusChanged; _request.TransferProgressChanged += _request_TransferProgressChanged; // 使用BackgroundTransferService添加文件传输请求 try { BackgroundTransferService.Add(_request); } catch (Exception ex) { MessageBox.Show("无法添加请求:" + ex.Message); } }
其中:
void _request_TransferStatusChanged(object sender, BackgroundTransferEventArgs e) { if (e.Request.TransferStatus == TransferStatus.Completed) { if (e.Request.StatusCode == 200 || e.Request.StatusCode==206) { btnMove.IsEnabled = true; //to do something else } } }void _request_TransferProgressChanged(object sender, BackgroundTransferEventArgs e) { Bar.Value = _request.BytesReceived*100/_request.TotalBytesToReceive; }
6、给“移动”按钮添加事件:
string fileName; private void btnMove_Click(object sender, RoutedEventArgs e) { fileName = downloadPath.Split(new char[] { '/' }, StringSplitOptions.None)[2]; using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) { if (storage.FileExists(downloadPath)) { storage.MoveFile(downloadPath, fileName); btnPlay.IsEnabled = true; } } }
private void btnPlay_Click(object sender, RoutedEventArgs e) { AudioTrack _audioTrack = new AudioTrack(new Uri(fileName, UriKind.Relative),"歌曲名", "艺术家", "专辑", null); BackgroundAudioPlayer.Instance.Track = _audioTrack; BackgroundAudioPlayer.Instance.Play(); }
8、运行程序。输入音频文件下载地址,即可实现下载网络音频,并在后台播放下载完成的音频文件
9、一些说明:
- BackgroundTransferRequest的下载地址必须下载到独立存储空间的“shared/transfers/”的文件夹下,但是此地址不能作为BackgroundAudioPlayer类的音频播放地址,一次需要将其移动位置后才能进行播放。
- 记得对“WindowPhone音频播放代理”项目的引用,因为即使不引用也不会出现异常,导致无法播放音频。
- Tip:可以使用 WindowsPhonePowerTools工具查看部署的App独立存储空间的目录结构和文件
- MSDN上有更详细的关于“如何播放 Windows Phone 的后台音频”的说明文档,详见:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh202978(v=vs.105).aspx
- 感谢雪松写的文章(Windows Phone Mango开发实践——后台音频)的借鉴,可惜是Mango的,不过多数内容对WP8还是一样的。
- 第一次攥写这类开发博文,不足之处还请大家见谅。
- 源码下载
0 0
- WindowsPhone 8 如何下载网络音频到独立存储空间中后台播放
- WindowsPhone 8 音频播放代理制作简单音乐播放器
- 录制、播放语音时,后台音频仍旧播放中
- AVPlayer后台播放音频
- 后台播放暂停音频
- 后台播放音频
- 音频后台播放
- iOS后台播放音频
- 音频后台播放
- 音频后台播放
- iOS音频后台播放
- WindowsPhone 8&8.1 独立储存区文件操作
- 音频播放AVAudioPlayer后台播放
- windowsphone 网络
- MediaPlayer播放网络音频
- MediaPlayer播放网络音频
- android播放网络音频
- Android 播放网络音频
- STL源码分析《3》----辅助空间不足时,如何进行归并排序
- android学习和广告平台赚钱
- javaweb之response refresh响应头控制浏览器刷新(几秒后跳转页面)
- python写的一个简单的英汉翻译
- 邹棕走组鬃锥住踪upnpfeop
- WindowsPhone 8 如何下载网络音频到独立存储空间中后台播放
- javaweb之response用Expires头控制浏览器使用缓存
- Linux下g++编译与使用静态库和动态库
- 新手上路
- javaweb之response重定向
- 关于Android 获得图片的总结
- 物化视图————为提升性能
- VersionToNormal.py
- hdu oj 2033