昨天把应用的后台播放代理搞定了,但是运行的状况不太好,在网络不好的情况下有时候会崩溃,更多的时候是没有声音。

现在的任务就有两个了:一个是搞定网络,这部分还没有一个很好的计划,因为前台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)相关推荐

  1. 开发落网电台windows phone 8应用的计划(1)

    最近我都在学习如何编写windows phone应用,一直以来我都想开发一个比较有意义的项目. 大约在一个星期以前,我突然想出了一个点子:开发一个落网电台的音乐应用.今天开始正式筹划这个项目,在这里立 ...

  2. 开发落网电台windows phone 8应用的计划(10)-----收尾

    前段时间还计划把落网做得更好,对一些存在的问题也做出了规划,后来想了想,就算是我加入再多的功能,这个应用依然不是一个合格的应用.尽管有些失落,我还是打算结束继续开发落网的计划. 之所以落网最终不能成为 ...

  3. 开发落网电台windows phone 8应用的计划(7)

    今天终于把该有的功能做完了,应用也能正常的运行了. 上次的问题也解决了,我并不知道问题出在什么地方(我猜是线程被堵住了),于是我干脆在OpenReadAsync时用ManualResetEvent阻塞 ...

  4. 开发落网电台windows phone 8应用的计划(2)

    今天把落网的app做了个简单的界面,由于水平有限,暂时只能弄到这样了,还翻了不少的文档. 这是界面: 后台的音乐控制还没有开始实现,对于后台的代理还不太熟悉,准备先开发一个简单的版本 另外加了一个ap ...

  5. 开发落网电台windows phone 8应用的计划(5)

    这两天把网络的事情搞了一下,由于并没有api可以使用,所以我是选择下载了网站的html代码用正则表达式找出资源链接. 但是到现在也不知道是不是出于网络的原因,后台的OpenReadAsyncCompl ...

  6. 开发落网电台windows phone 8应用的计划(6)

    今天早上看了一下应用存在的问题,也在网上查找了相关的问题的解决方法,其中有一个地方提醒了我,就是当我在GetMaxAlbumNumber后,我会用一个循环去判断事件是否发生,可能是这儿出现了问题,因为 ...

  7. 开发落网电台windows phone 8应用的计划(3)

    今天花了些时间把audioplayeragent看了一下,大致明白了其中的流程. 大概就是把音乐的控制交给音频代理,重写audioplayeragent中的方法,实现一些播放控制方面的一些功能,然后调 ...

  8. Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE

    Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...

  9. 开发板、Windows、Ubuntu三者互联——韦东山嵌入式Linux学习笔记08

    实验环境: 1. Windows7 2. VMware12.0+Ubuntu 3. JZ2440 按理说,在物理机上安装Ubuntu操作系统是比较推荐的方法.不过,因为windows上有很多好用的工具 ...

最新文章

  1. IDEA创建子项目 parent标签报错
  2. NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
  3. 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!...
  4. 视图、索引、存储过程优缺点
  5. 量子叠加态系数_1.2 量子比特
  6. 传递参数命令——xargs
  7. 用PyQt实现透明桌面时钟小部件
  8. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)...
  9. vertica 数据库 linux,配置访问列式数据库vertica的php环境
  10. Flink系列-实时数仓之Flink实时写入ClickHouse并实时大屏Tableau
  11. 送你一份计算机视觉精品学习资料,学完拿高薪offer!
  12. python 奥数_Python 和 奥数 — 同余法求数值
  13. android+3.1.2+imagebutton监听,button以及Imagebutton的使用
  14. AndroidStudio实现在图片上涂鸦并记录涂鸦轨迹
  15. Postman安装(汉化Postman)
  16. Android仿人人客户端(v5.7.1)开发(不错)
  17. 轻量级图片批量上传JS插件 imgFileupload.js
  18. thrift序列化 java_JAVA RPC (五) 之thrift序列化RPC消息体
  19. 办公软件测试题目,Office高级办公软件测试(附答案)
  20. java 画图 例子_JAVA简易画图工具

热门文章

  1. 为什么论文中有的空格特别大
  2. net.sf.json
  3. CSS3通过3D变换立体旋转相册
  4. ORA-12516 解决方法
  5. ROS - MoveIt 学习
  6. 已解决(Python安装报错)Visit python.org to download an earlier version of Python.
  7. C语言基础代码(10题)
  8. vim:vim从入门到放弃
  9. 杭漂结束(end)|我从有赞离职啦|结束杭漂
  10. intellij idea中插件的安装方法及推荐