using System; using Shared; using com.hdl.on; using System.Collections.Generic; using System.Security; namespace HDL_ON.UI.Music { public class A31PlayMusicPage : FrameLayout { /// /// 当前对象构造函数 /// public A31PlayMusicPage() { } /// /// 重写RemoveFromParent方法 /// public override void RemoveFromParent() { base.RemoveFromParent(); Volume.VolumeChange = null; if (timerThread != null) { try { if (timerThread.IsAlive) { timerThread.Abort(); } } catch { } } } /// /// new布局界面 /// View.PlayView playView = new View.PlayView(); public void Show() { ///1秒定时更新状态 timerUpdateStatus(); #region ---界面布局--- this.BackgroundColor = MusicColor.ViewColor; var topView = new TopView(); topView.setBtn.Visible = true; this.AddChidren(topView.TopFLayoutView()); topView.topNameBtn.Text = A31MusicModel.Current.Name; topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { RemoveFromParent(); }; topView.clickSetBtn.MouseUpEventHandler += (sender, e) => { A31MusicSourcePage a31MusicSourcePage = new A31MusicSourcePage(); MainPage.BasePageView.AddChidren(a31MusicSourcePage); a31MusicSourcePage.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; var middLayout = new FrameLayout { Y = topView.fLayout.Bottom, Height = Application.GetRealHeight(H_W.H - H_W.T_Height), }; this.AddChidren(middLayout); ///加载播放音乐界面的控件方法 playView.viewFrameLayout(middLayout); #endregion #region ---控件的点击事件--- //收藏图标事件 playView.collectIconBtn.MouseUpEventHandler += (sender, e) => { playView.collectIconBtn.IsSelected = !playView.collectIconBtn.IsSelected; if (playView.collectIconBtn.IsSelected) { A31MusicModel.Current.collection = true; } else { A31MusicModel.Current.collection = false; } }; //快进滑动弹起事件; playView.diyArcSeekBar.OnStopTrackingTouchEvent+= (sender, e) => { int totalSecond = (int)(playView.diyArcSeekBar.Progress * 1.0f / 100 * int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000); //分钟 int Minute = totalSecond / 60; //秒钟 int Second = totalSecond % 60; string time = "00" + ":" + (Minute.ToString().Length < 2 ? "0" + Minute.ToString() : Minute.ToString()) + ":" + (Second.ToString().Length < 2 ? "0" + Second.ToString() : Second.ToString()); SendMethod.Seek(time, A31MusicModel.Current); A31MusicModel.Current.A31PlayStatus.curpos = (DateTime.Parse(time) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString(); }; ///切换播放模式点击事件; playView.playOrderBtn.MouseUpEventHandler += (sender, e) => { string msg = Language.StringByID(StringId.switchTo); switch (A31MusicModel.Current.A31PlayStatus.loop) { //0列表循环,1单曲循环,2随机播放; case "0": A31MusicModel.Current.A31PlayStatus.loop = "1"; playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png"; msg += Language.StringByID(StringId.singleMode); break; case "1": A31MusicModel.Current.A31PlayStatus.loop = "2"; playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png"; msg += Language.StringByID(StringId.randomMode); break; case "2": A31MusicModel.Current.A31PlayStatus.loop = "0"; playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png"; msg += Language.StringByID(StringId.listMode); break; } new PublicAssmebly().TipMsgAutoClose(msg, false,1000); string url = "http://" + A31MusicModel.Current.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + "loopmode:" + A31MusicModel.Current.A31PlayStatus.loop; SendMethod.SendCommand(url); }; ///添加喜爱点击事件; playView.loveBtn.MouseUpEventHandler += (sender, e) => { var url = A31MusicModel.Current.A31PlayStatus.TrackURL; var album = A31MusicModel.Current.A31PlayStatus.Album; var artist = A31MusicModel.Current.A31PlayStatus.Artist; var song = A31MusicModel.Current.A31PlayStatus.Title; if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK") { playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected; if (playView.loveBtn.IsSelected) { if (null == A31MusicModel.Current.LoveRadioInfoList.Find((musicInfo) => { return url == musicInfo.URL; })) { A31MusicModel.Current.LoveRadioInfoList.Add(new MusicInfo { Title = song, URL = url, }); } } else { A31MusicModel.Current.LoveRadioInfoList.RemoveAll((musicInfo) => { return url == musicInfo.URL; }); } } else { playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected; if (playView.loveBtn.IsSelected) { if (null == A31MusicModel.Current.LoveMusicInfoList.Find((musicInfo) => { return url == musicInfo.URL; })) { A31MusicModel.Current.LoveMusicInfoList.Add(new MusicInfo { Title = song, URL = url, Artist = artist, Album = album }); } } else { A31MusicModel.Current.LoveMusicInfoList.RemoveAll((musicInfo) => { //也要加歌手名判断 return musicInfo.URL == url; }); } } A31MusicModel.Save(); }; ///我的列表点击事件 playView.playlistBtn.MouseUpEventHandler += (sender, e) => { #region 布局界面--- Loading loading = new Loading(); UI2.FuntionControlView.Music.View.MyListView myListView = new UI2.FuntionControlView.Music.View.MyListView(); myListView.frameLayout(this, A31MusicModel.Current); myListView.dialogFra.AddChidren(loading);//dialogFra刷新图标父控件 ///下拉刷新 myListView.verticalScrolViewLayout.BeginHeaderRefreshingAction += () => { //结束刷新 myListView.verticalScrolViewLayout.EndHeaderRefreshing(); }; ///移除界面 EventHandler removeFromParentView = (sen, e1) => { myListView.popFra.RemoveFromParent(); }; myListView.backIextBtn.MouseUpEventHandler += removeFromParentView; myListView.popFra.MouseUpEventHandler += removeFromParentView; #endregion loading.Start(); GetMusicList((listName) => { loading.Hide(); PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, listName); UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout); }); }; ///音量图标点击事件 playView.volIconBtn.MouseUpEventHandler += (sender, e) => { if (A31MusicModel.Current.ServerClientType == 1 && A31MusicModel.Current.Slave.slave_list.Count != 0) { ///主播放器 var volumeView = new View.DialogView { }; volumeView.PlayerVolumeView(A31MusicModel.Current); volumeView.UpdateVolume(); } }; ///音量进度条点击事件 int startVolume =0;//之前的音量 //int endVolume = 0;//现在的音量 EventHandler progressClick = (sender, e) => { playView.volValueBtn.Text = playView.volSeekBar.Progress + "%"; if (startVolume != e) { startVolume = e; SendMethod.ControlVolume(e, A31MusicModel.Current); A31MusicModel.Current.A31PlayStatus.vol = e.ToString(); } }; playView.volSeekBar.OnProgressChangedEvent += progressClick; playView.volSeekBar.OnStopTrackingTouchEvent += progressClick; ///上一曲点击事件 playView.prevBtn.MouseDownEventHandler += (sender, e) => { playView.prevBtn.IsSelected = true; SendMethod.Previous(A31MusicModel.Current); }; playView.prevBtn.MouseUpEventHandler += (sender, e) => { playView.prevBtn.IsSelected = false; }; ///暂停/播放点击事件 playView.playBtn.MouseDownEventHandler += (sender, e) => { if (playView.playBtn.IsSelected) { playView.playBtn.IsSelected = false; SendMethod.Pause(A31MusicModel.Current); A31MusicModel.Current.A31PlayStatus.status = "pause"; } else { playView.playBtn.IsSelected = true; SendMethod.Play(A31MusicModel.Current); A31MusicModel.Current.A31PlayStatus.status = "play"; } }; ///下一曲点击事件 playView.nextBtn.MouseDownEventHandler += (sender, e) => { playView.nextBtn.IsSelected = true; SendMethod.Next(A31MusicModel.Current); }; playView.nextBtn.MouseUpEventHandler += (sender, e) => { playView.nextBtn.IsSelected = false; }; ///物理按键的点击事件 Volume.VolumeChange = (volume) => { if (Application.DeviceType == Device.Ios && A31MusicModel.Current.A31PlayStatus.Source == "BLUETOOTH") { return; } playView.volSeekBar.Progress = volume; if (startVolume != volume) { startVolume = volume; SendMethod.ControlVolume(volume, A31MusicModel.Current); A31MusicModel.Current.A31PlayStatus.vol = volume.ToString(); } }; #endregion } /// /// 定义全局线程 /// System.Threading.Thread timerThread; /// /// 定时更新状态 /// void timerUpdateStatus() { timerThread = new System.Threading.Thread((obj) => { while (true) { Application.RunOnMainThread(() => { try { //更新总时间 //总共有多少秒 int totalSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000; //分钟 int totalMusicMinute = totalSecond / 60; //秒钟 int totalMusicSecond = totalSecond % 60; string totalTime = (totalMusicMinute.ToString().Length < 2 ? "0" + totalMusicMinute.ToString() : totalMusicMinute.ToString()) + ":" + (totalMusicSecond.ToString().Length < 2 ? "0" + totalMusicSecond.ToString() : totalMusicSecond.ToString()); playView.endTimeBtn.Text = totalTime; //topView.topNameBtn.Text = A31MusicModel.Current.Name; switch (A31MusicModel.Current.A31PlayStatus.loop) { case "0"://列表循环 playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png"; break; case "1"://单曲顺环 playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png"; break; case "2"://随机播放 playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png"; break; } if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK") { var v = A31MusicModel.Current.LoveRadioInfoList.Find((like) => { return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL; }); if (v != null) { playView.loveBtn.IsSelected = true; } else { playView.loveBtn.IsSelected = false; } } else { var v = A31MusicModel.Current.LoveMusicInfoList.Find((like) => { return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL; }); if (v != null) { playView.loveBtn.IsSelected = true; } else { playView.loveBtn.IsSelected = false; } } playView.regionBtn.Text = A31MusicModel.Current.GetRoomListName(); if (A31MusicModel.Current.collection) { playView.collectIconBtn.IsSelected = true; } else { playView.collectIconBtn.IsSelected = false; } //if (A31MusicModel.Current.A31PlayStatus.IsMute) //{ // // btnMute.IsSelected = true;//静音图标 // playView.volSeekBar.Progress = 0; //} //else //{ // // btnMute.IsSelected = false;//静音图标 // if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds) // { // //声音进度条; // playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol); // //显示当前音量值; // playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%"; // } //} if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds) { //音量进度条; playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol); //显示当前音量值; playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%"; } //更新播放器音量给系统音量 Volume.MusicVolume = playView.volSeekBar.Progress; //当前播放音乐时间 int playSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.curpos) / 1000 + (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds; int playMusicMinute = playSecond / 60; //秒钟 int playMusicSecond = playSecond % 60; string playTime = (playMusicMinute.ToString().Length < 2 ? "0" + playMusicMinute.ToString() : playMusicMinute.ToString()) + ":" + (playMusicSecond.ToString().Length < 2 ? "0" + playMusicSecond.ToString() : playMusicSecond.ToString()); if (A31MusicModel.Current.A31PlayStatus.status == "play") { playView.playBtn.IsSelected = true; //如果在播放,时间就不断变化 playView.startTimeBtn.Text = playTime; if (totalSecond == 0) { //歌曲进度条 playView.diyArcSeekBar.Progress = 0; } else { //歌曲进度条 playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1 } } else { playView.playBtn.IsSelected = false; //停止播放 playView.startTimeBtn.Text =playTime; } playView.songNameTextView.Text = (A31MusicModel.Current.A31PlayStatus.Title == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Title); playView.singerBtn.Text = (A31MusicModel.Current.A31PlayStatus.Artist == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Artist.Trim()); //更新源的界面 showSourcePage(); } catch (Exception e) { var ee = e.Message; } }); System.Threading.Thread.Sleep(1000 * 1); } }) { IsBackground = true }; timerThread.Start(); } /// /// 更新不同音乐源界面图标状态 /// void showSourcePage() { playView.loveBtn.Alpha = 1; playView.loveBtn.Enable = true; playView.playlistBtn.Alpha = 1; playView.playlistBtn.Enable = true; playView.prevBtn.Alpha = 1; playView.prevBtn.Enable = true; playView.nextBtn.Alpha = 1; playView.nextBtn.Enable = true; playView.playOrderBtn.Alpha = 1; playView.playOrderBtn.Enable = true; playView.diyArcSeekBar.IsClickable = true; switch (A31MusicModel.Current.A31PlayStatus.Source) { case "QPLAY"://QQ音乐 playView.loveBtn.Alpha = 0.5f; playView.loveBtn.Enable = false; break; case "AIRPLAY"://酷狗音乐 playView.loveBtn.Alpha = 0.5f; playView.loveBtn.Enable = false; playView.diyArcSeekBar.IsClickable = false; break; case "SONGLIST-NETWORK"://本地音乐 break; case "SONGLIST-LOCAL"://USB break; case "RADIO-NETWORK"://在线电台 playView.playlistBtn.Alpha = 1; playView.playlistBtn.Enable = true; playView.prevBtn.Alpha = 0.5f; playView.prevBtn.Enable = false; playView.nextBtn.Alpha = 0.5f; playView.nextBtn.Enable = false; playView.playOrderBtn.Alpha = 0.5f; playView.playOrderBtn.Enable = false; break; case "BLUETOOTH"://蓝牙 case "LINE-IN"://线路输入 playView.loveBtn.Alpha = 0.5f; playView.loveBtn.Enable = false; playView.playlistBtn.Alpha = 0.5f; playView.playlistBtn.Enable = false; playView.prevBtn.Alpha = 0.5f; playView.prevBtn.Enable = false; playView.nextBtn.Alpha = 0.5f; playView.nextBtn.Enable = false; playView.playOrderBtn.Alpha = 0.5f; playView.playOrderBtn.Enable = false; break; default: playView.diyArcSeekBar.IsClickable = false; playView.loveBtn.Alpha = 0.5f; playView.loveBtn.Enable = false; playView.playlistBtn.Alpha = 0.5f; playView.playlistBtn.Enable = false; playView.prevBtn.Alpha = 0.5f; playView.prevBtn.Enable = false; playView.nextBtn.Alpha = 0.5f; playView.nextBtn.Enable = false; playView.playOrderBtn.Alpha = 0.5f; playView.playOrderBtn.Enable = false; break; } } /// /// 加载播放音乐列表View /// /// void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout, string playListName) { verticalScrolViewLayout.RemoveAll(); UI2.FuntionControlView.Music.UpdateThread.playMusuc(verticalScrolViewLayout,"播放列表", playListName, A31MusicModel.Current.CurrentPlayMusicInfoList,A31MusicModel.Current,frameLayout); } /// /// 定时更新当前播放音乐 /// void UpdateSelectedMusic(FrameLayout frameLayout, VerticalRefreshLayout middViewLayout) { UI2.FuntionControlView.Music.UpdateThread.updateThread(frameLayout, middViewLayout, A31MusicModel.Current); } /// /// 读取播放音乐列表 /// /// void GetMusicList(Action action) { System.Threading.Tasks.Task.Run(() => { string playListName = "List"; string sourceName = "SourceName"; try { if (A31MusicModel.Current.A31PlayStatus.Source == "STATION-NETWORK") { A31MusicModel.Current.CurrentPlayMusicInfoList = new List(); return; } if (A31MusicModel.Current.A31PlayStatus.Source == "AIRPLAY") { A31MusicModel.Current.CurrentPlayMusicInfoList = new List(); return; } var playString = SendMethod.GetCurrentPlayList(A31MusicModel.Current); A31MusicModel.Current.CurrentPlayMusicInfoList = new List(); var se = System.Security.SecurityElement.FromString(playString); while (se.Children != null) { se = se.Children[0] as System.Security.SecurityElement; } playListName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListName").Text; sourceName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListInfo").SearchForTextOfTag("SourceName"); foreach (SecurityElement track in SecurityElement.FromString(se.Text).SearchForChildByTag("Tracks").Children) { MusicInfo musicInfo = new MusicInfo(); musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;"); var metadata = track.SearchForTextOfTag("Metadata"); musicInfo.SourceName = track.SearchForTextOfTag("Source"); if (string.IsNullOrEmpty(metadata)) { continue; } if (A31MusicModel.IsJson(metadata)) { var qqSong = Newtonsoft.Json.JsonConvert.DeserializeObject(metadata); musicInfo.Album = qqSong.album; musicInfo.Title = qqSong.title; musicInfo.Artist = qqSong.creator; } else { metadata = metadata.Replace("", "").Replace("&", "&amp;"); var item = SecurityElement.FromString(metadata).SearchForChildByTag("item"); musicInfo.Title = item.SearchForTextOfTag("dc:title"); musicInfo.Artist = item.SearchForTextOfTag("upnp:artist"); musicInfo.Album = item.SearchForTextOfTag("upnp:album"); musicInfo.Duration = item.SearchForTextOfTag("res"); musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid"); } A31MusicModel.Current.CurrentPlayMusicInfoList.Add(musicInfo); } } catch { } finally { Application.RunOnMainThread(() => { action(playListName); //loading.Hide(); //PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, playListName); //UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout); }); } }); } } }