开发落网电台windows phone 8应用的计划(4)
昨天把应用的后台播放代理搞定了,但是运行的状况不太好,在网络不好的情况下有时候会崩溃,更多的时候是没有声音。
现在的任务就有两个了:一个是搞定网络,这部分还没有一个很好的计划,因为前台UI和后台播放代理的通信我还没有想到很好的办法,能想到的方法是借助backgroundPlayer的调用来解决,不过这就限制了后期功能的扩展,不过可能就先这么做吧;第二个是怎么处理好缓冲的问题。
先把后台代理放在这上面吧,还是简单版本。参照了csdn的做法,没有做网络。
1 using System; 2 using System.Diagnostics; 3 using System.Windows; 4 using Microsoft.Phone.BackgroundAudio; 5 using System.Collections.Generic; 6 using System.Threading; 7 namespace LuooAudioPlayerAgent 8 { 9 public class AudioPlayer : AudioPlayerAgent 10 { 11 #region 字段 12 static int currentTrackNumber=0; 13 public static int totalNumber; 14 private static List<AudioTrack> playList=new List<AudioTrack>() 15 { 16 new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/01.mp3",UriKind.Absolute),"1","","",null), 17 new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/02.mp3",UriKind.Absolute),"2","","",null), 18 //new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/03.mp3",UriKind.Absolute),"","","",null), 19 //new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/04.mp3" , UriKind.Absolute) , "" , "" , "" , null) 20 }; 21 #endregion 22 23 static AudioPlayer() 24 { 25 //GetList(); 26 27 Deployment.Current.Dispatcher.BeginInvoke(delegate 28 { 29 Application.Current.UnhandledException += UnhandledException; 30 }); 31 } 32 33 #region 出现未处理的异常时执行的代码 34 private static void UnhandledException( object sender , ApplicationUnhandledExceptionEventArgs e ) 35 { 36 if(Debugger.IsAttached) 37 { 38 // 出现未处理的异常;强行进入调试器 39 Debugger.Break(); 40 } 41 } 42 #endregion 43 44 protected override void OnPlayStateChanged( BackgroundAudioPlayer player , AudioTrack track , PlayState playState ) 45 { 46 switch(playState) 47 { 48 case PlayState.TrackEnded: 49 PlayNextTrack(player); 50 break; 51 case PlayState.TrackReady: 52 player.Play(); 53 break; 54 } 55 NotifyComplete(); 56 } 57 58 protected override void OnUserAction( BackgroundAudioPlayer player , AudioTrack track , UserAction action , object param ) 59 { 60 switch(action) 61 { 62 case UserAction.Play: 63 if(player.Track==null) player.Track=playList[currentTrackNumber]; 64 player.Play(); 65 break; 66 67 case UserAction.Pause: 68 player.Pause(); 69 break; 70 71 case UserAction.SkipNext: 72 PlayNextTrack(player); 73 break; 74 75 case UserAction.SkipPrevious: 76 PlayPreviousTrack(player); 77 break; 78 79 //case UserAction.FastForward: 80 // GetList(); 81 // break; 82 } 83 NotifyComplete(); 84 } 85 86 #region control 87 88 private void PlayNextTrack( BackgroundAudioPlayer player ) 89 { 90 if(++currentTrackNumber >=playList.Count) 91 { 92 currentTrackNumber = 0; 93 } 94 player.Track=playList[currentTrackNumber]; 95 96 } 97 98 private void PlayPreviousTrack( BackgroundAudioPlayer player ) 99 { 100 if(--currentTrackNumber < 0) 101 { 102 currentTrackNumber = playList.Count - 1; 103 } 104 player.Track=playList[currentTrackNumber]; 105 106 } 107 108 109 110 #endregion 111 112 113 protected override void OnError( BackgroundAudioPlayer player , AudioTrack track , Exception error , bool isFatal ) 114 { 115 if(isFatal) 116 { 117 Abort(); 118 } 119 else 120 { 121 NotifyComplete(); 122 } 123 124 } 125 126 protected override void OnCancel() 127 { 128 129 } 130 131 public static void GetList() 132 { 133 playList.Add(new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/04.mp3" , UriKind.Absolute) , "4" , "" , "" , null)); 134 //playList.Add(new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/02.mp3" , UriKind.Absolute) , "" , "" , "" , null)); 135 //playList.Add(new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio587/03.mp3" , UriKind.Absolute) , "" , "" , "" , null)); 136 //totalNumber=playList.Count; 137 } 138 } 139 }
View Code
转载于:https://www.cnblogs.com/au-xiaotian/p/3599434.html
开发落网电台windows phone 8应用的计划(4)相关推荐
- 开发落网电台windows phone 8应用的计划(1)
最近我都在学习如何编写windows phone应用,一直以来我都想开发一个比较有意义的项目. 大约在一个星期以前,我突然想出了一个点子:开发一个落网电台的音乐应用.今天开始正式筹划这个项目,在这里立 ...
- 开发落网电台windows phone 8应用的计划(10)-----收尾
前段时间还计划把落网做得更好,对一些存在的问题也做出了规划,后来想了想,就算是我加入再多的功能,这个应用依然不是一个合格的应用.尽管有些失落,我还是打算结束继续开发落网的计划. 之所以落网最终不能成为 ...
- 开发落网电台windows phone 8应用的计划(7)
今天终于把该有的功能做完了,应用也能正常的运行了. 上次的问题也解决了,我并不知道问题出在什么地方(我猜是线程被堵住了),于是我干脆在OpenReadAsync时用ManualResetEvent阻塞 ...
- 开发落网电台windows phone 8应用的计划(2)
今天把落网的app做了个简单的界面,由于水平有限,暂时只能弄到这样了,还翻了不少的文档. 这是界面: 后台的音乐控制还没有开始实现,对于后台的代理还不太熟悉,准备先开发一个简单的版本 另外加了一个ap ...
- 开发落网电台windows phone 8应用的计划(5)
这两天把网络的事情搞了一下,由于并没有api可以使用,所以我是选择下载了网站的html代码用正则表达式找出资源链接. 但是到现在也不知道是不是出于网络的原因,后台的OpenReadAsyncCompl ...
- 开发落网电台windows phone 8应用的计划(6)
今天早上看了一下应用存在的问题,也在网上查找了相关的问题的解决方法,其中有一个地方提醒了我,就是当我在GetMaxAlbumNumber后,我会用一个循环去判断事件是否发生,可能是这儿出现了问题,因为 ...
- 开发落网电台windows phone 8应用的计划(3)
今天花了些时间把audioplayeragent看了一下,大致明白了其中的流程. 大概就是把音乐的控制交给音频代理,重写audioplayeragent中的方法,实现一些播放控制方面的一些功能,然后调 ...
- Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE
Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...
- 开发板、Windows、Ubuntu三者互联——韦东山嵌入式Linux学习笔记08
实验环境: 1. Windows7 2. VMware12.0+Ubuntu 3. JZ2440 按理说,在物理机上安装Ubuntu操作系统是比较推荐的方法.不过,因为windows上有很多好用的工具 ...
最新文章
- IDEA创建子项目 parent标签报错
- NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
- 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!...
- 视图、索引、存储过程优缺点
- 量子叠加态系数_1.2 量子比特
- 传递参数命令——xargs
- 用PyQt实现透明桌面时钟小部件
- DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)...
- vertica 数据库 linux,配置访问列式数据库vertica的php环境
- Flink系列-实时数仓之Flink实时写入ClickHouse并实时大屏Tableau
- 送你一份计算机视觉精品学习资料,学完拿高薪offer!
- python 奥数_Python 和 奥数 — 同余法求数值
- android+3.1.2+imagebutton监听,button以及Imagebutton的使用
- AndroidStudio实现在图片上涂鸦并记录涂鸦轨迹
- Postman安装(汉化Postman)
- Android仿人人客户端(v5.7.1)开发(不错)
- 轻量级图片批量上传JS插件 imgFileupload.js
- thrift序列化 java_JAVA RPC (五) 之thrift序列化RPC消息体
- 办公软件测试题目,Office高级办公软件测试(附答案)
- java 画图 例子_JAVA简易画图工具