这两天把网络的事情搞了一下,由于并没有api可以使用,所以我是选择下载了网站的html代码用正则表达式找出资源链接。
但是到现在也不知道是不是出于网络的原因,后台的OpenReadAsyncComplete事件一直没有响应。
我用的是webClient类,代码如下:
问题代码出现在最后一部分。。
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 }
如果园友看了之后有知道其中原因的,欢迎指教。。。。
mail:tian_feng_bo@live.com
开发落网电台windows phone 8应用的计划(5),布布扣,bubuko.com
原文:http://www.cnblogs.com/au-xiaotian/p/3606346.html