首页 > Windows开发 > 详细

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

时间:2014-03-18 12:03:34      阅读:485      评论:0      收藏:0      [点我收藏+]

这两天把网络的事情搞了一下,由于并没有api可以使用,所以我是选择下载了网站的html代码用正则表达式找出资源链接。

但是到现在也不知道是不是出于网络的原因,后台的OpenReadAsyncComplete事件一直没有响应。

我用的是webClient类,代码如下:

问题代码出现在最后一部分。。

bubuko.com,布布扣
  1 using System;
  2 using System.Diagnostics;
  3 using System.Windows;
  4 using Microsoft.Phone.BackgroundAudio;
  5 using System.Collections.Generic;
  6 using System.Text.RegularExpressions;
  7 using System.Threading;
  8 using System.Net;
  9 using System.IO;
 10 namespace LuooAudioPlayerAgent
 11 {
 12     public class AudioPlayer : AudioPlayerAgent
 13     {
 14         #region 字段
 15 
 16         static int currentTrackNumber=0;
 17         static int maxAlbumNumber=-1;
 18         static int currentAlbumNumber=-1;
 19         static bool isFinished=false;
 20         private static List<AudioTrack> playList=new List<AudioTrack>();
 21         //{
 22         //    new AudioTrack(new Uri("http://luoo.800edu.net/low/luoo/radio589/01.mp3",UriKind.Absolute),null,null,null,null)
 23         //};
 24 
 25         #endregion
 26 
 27         static AudioPlayer()
 28         {
 29             GetMaxAlbumNumber();
 30             while(!isFinished) { }
 31             GetList();
 32             Deployment.Current.Dispatcher.BeginInvoke(delegate
 33             {
 34                 Application.Current.UnhandledException += UnhandledException;
 35             });
 36         }
 37 
 38         #region 出现未处理的异常时执行的代码
 39         private static void UnhandledException( object sender , ApplicationUnhandledExceptionEventArgs e )
 40         {
 41             if(Debugger.IsAttached)
 42             {
 43                 // 出现未处理的异常;强行进入调试器
 44                 Debugger.Break();
 45             }
 46         }
 47         #endregion
 48 
 49         protected override void OnPlayStateChanged( BackgroundAudioPlayer player , AudioTrack track , PlayState playState )
 50         {
 51             switch(playState)
 52             {
 53                 case PlayState.TrackEnded:
 54                     PlayNextTrack(player);
 55                     break;
 56                 case PlayState.TrackReady:
 57                     player.Play();
 58                     break;
 59 
 60             }
 61             NotifyComplete();
 62         }
 63 
 64         protected override void OnUserAction( BackgroundAudioPlayer player , AudioTrack track , UserAction action , object param )
 65         {
 66             switch(action)
 67             {
 68                 case UserAction.Play:
 69                     if(player.Track==null) player.Track=playList[currentTrackNumber];
 70                     player.Play();
 71                     break;
 72 
 73                 case UserAction.Pause:
 74                     player.Pause();
 75                     break;
 76 
 77                 case UserAction.SkipNext:
 78                     PlayNextTrack(player);
 79                     break;
 80 
 81                 case UserAction.SkipPrevious:
 82                     PlayPreviousTrack(player);
 83                     break;
 84                 case UserAction.FastForward:
 85                     if(currentAlbumNumber<maxAlbumNumber)
 86                     {
 87                         ++currentAlbumNumber;
 88                         GetList();
 89                         player.Track=playList[currentTrackNumber];
 90                     }
 91                     break;
 92                 case UserAction.Rewind: 
 93                     --currentAlbumNumber;
 94                     GetList();
 95                     player.Track=playList[currentTrackNumber];
 96                     break;
 97                 default:
 98                     break;
 99             }
100             NotifyComplete();
101         }
102 
103         #region  control
104 
105         private void PlayNextTrack( BackgroundAudioPlayer player )
106         {
107             try
108             {
109                 if(++currentTrackNumber >=playList.Count)
110                 {
111                     currentTrackNumber = 0;
112                 }
113                 player.Track=playList[currentTrackNumber];
114             }
115             catch(Exception e)
116             {
117                 //todo
118             }
119 
120         }
121 
122         private void PlayPreviousTrack( BackgroundAudioPlayer player )
123         {
124             try
125             {
126                 if(--currentTrackNumber < 0)
127                 {
128                     currentTrackNumber = playList.Count - 1;
129                 }
130                 player.Track=playList[currentTrackNumber];
131             }
132             catch(Exception e) 
133             {
134                 //todo
135             }
136         }
137 
138 
139 
140         #endregion
141 
142 
143         protected override void OnError( BackgroundAudioPlayer player , AudioTrack track , Exception error , bool isFatal )
144         {
145             if(isFatal)
146             {
147                 Abort();
148             }
149             else
150             {
151                 NotifyComplete();
152             }
153 
154         }
155 
156         protected override void OnCancel()
157         {
158 
159         }
160 
161         public static  void GetList()
162         {
163             //isFinished
164             //clear playlist
165             playList.Clear();
166             //get Html
167             //WebClient playListWebClient=new WebClient();
168             //playListWebClient.DownloadStringAsync(new Uri("http://www.luoo.net/music/"+currentAlbumNumber,UriKind.Absolute));
169             //playListWebClient.DownloadStringCompleted+=playListWebClient_DownloadStringCompleted;
170 
171             //for(int i=0;i<10;i++)
172             //{
173             //    var t=new AudioTrack();
174             //    t.Source=new Uri("http://luoo.800edu.net/low/luoo/radio"+currentAlbumNumber+"/"+i+".mp3");
175             //    playList.Add(t);
176             //}
177 
178         }
179 
180         static void playListWebClient_DownloadStringCompleted( object sender , DownloadStringCompletedEventArgs e )
181         {
182             int playListCount;
183             string pattern;
184             MatchCollection matches;
185             AudioTrack t;
186             //getAlbumAndArtist
187             pattern=@"track-album.>(.+)-(.+)</a>";
188             matches=Regex.Matches(@e.Result , pattern);
189             playListCount=matches.Count;
190             for(int i=0;i<playListCount;i++)
191             {
192                 t=new AudioTrack();
193                 t.Album=matches[i].Groups[1].ToString();
194                 t.Artist=matches[i].Groups[2].ToString();
195                 if(i<10)
196                     t.Source=new Uri("http://luoo.800edu.net/low/luoo/radio"+currentAlbumNumber+"/0"+i+".mp3");
197                 else
198                     t.Source=new Uri("http://luoo.800edu.net/low/luoo/radio"+currentAlbumNumber+"/"+i+".mp3");
199                 playList.Add(t);
200             }
201             //getMusicTitleAndMusicCover
202             pattern=@"img alt=.(.+). src=.(http://img.luoo.net/\S+60x60.jpg)";
203             matches=Regex.Matches(@e.Result , pattern);
204             for(int i=0 ; i<playListCount ; i++)
205             {
206                 playList[i].Title=matches[i].Groups[1].ToString();
207                 playList[i].Tag=matches[i].Groups[2].ToString();
208             }
209             //getAlbumCover
210             pattern=@"http://img.luoo.net/\S+640x452.jpg";
211             matches=Regex.Matches(@e.Result , pattern);
212             Uri cover=new Uri(matches[0].ToString() , UriKind.Absolute);
213             for(int i=0 ; i<playListCount ; i++)
214                 playList[i].AlbumArt=cover;
215             //getAlbumTitle
216             pattern=@"<title>(\S+)</title>";
217             matches=Regex.Matches(@e.Result , pattern);
218             string temp="|"+matches[0].Groups[1].ToString();
219             for(int i=0 ; i<playListCount ; i++)
220             {
221                 playList[i].Tag+=temp;
222             }
223             //
224             currentTrackNumber=0;
225             
226         }
227 
228         public static  void GetMaxAlbumNumber()
229         {
230             //GetMaxAlbumNumber
231             WebClient origionWebClient=new WebClient();
232             //origionWebClient.AllowReadStreamBuffering=false;
233             origionWebClient.OpenReadAsync(new Uri("http://www.luoo.net" , UriKind.Absolute));
234             origionWebClient.OpenReadCompleted+=origionWebClient_OpenReadCompleted; //。。。。这是事件
235             //set currentAlbumNumber
236         }
237 
238         static void origionWebClient_OpenReadCompleted( object sender , OpenReadCompletedEventArgs e ) //这里就是没有消息。。
239         {
240             StreamReader sR=new StreamReader(e.Result);
241             string html=sR.ReadToEnd();
242             //GetMaxAlbumNumber
243             string pattern=@"vol. [0-9]+";
244             MatchCollection matches=Regex.Matches(@html , pattern);
245             string temp=matches[0].ToString().Split( )[1];
246             maxAlbumNumber=int.Parse(temp);
247             //set currentAlbumNumber
248             currentAlbumNumber=maxAlbumNumber;
249             //set isFinished
250             isFinished=true;
251         }
252     }
253 }
bubuko.com,布布扣

如果园友看了之后有知道其中原因的,欢迎指教。。。。

mail:tian_feng_bo@live.com

开发落网电台windows phone 8应用的计划(5),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/au-xiaotian/p/3606346.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!