可視化作業——簡單播放器的更新
本次我對之前的簡單播放器進行了功能上的更新,主要加入了兩個功能
1.能夠播放在線音樂
2.可以將音樂緩存到本地
1.在編輯第一個功能的時候,我借鑒了很多,包括微軟文檔(https://msdn.microsoft.com/en-us/library/windows/apps/mt187272.aspx),其他同學的博客等等。而我的第一個版本的代碼是這樣的
private void TxtFilePath_KeyUp(object sender, KeyRoutedEventArgs e) { if (e.Key == Windows.System.VirtualKey.Enter) { TextBox tbPath= sender as TextBox; if (tbPath != null) { LoadMediaFromString(tbPath.Text); } } } private void LoadMediaFromString(string path) { try { Uri pathUri = newUri(path); media.Source = pathUri; } catch (Exception ex) { if (ex is FormatException) { // handle exception. // For example: Log error or notify user problem with file } } }
沒錯!就是文檔的代碼!
但是之後我發現完全沒有必要這麽麻煩,我們可以直接將URL交給播放器,就像這樣
Uri pathUri = new Uri(mybox.Text); media.Source = pathUri; media.Play();
其中mybox是我加入的一個TextBox,在播放器中只需將地址輸入TextBox中即可實現播放在線音頻。
2.將文件緩存到本地
借鑒文檔:https://docs.microsoft.com/zh-cn/windows/uwp/files/quickstart-reading-and-writing-files
我照著文檔將訪問文件的代碼copy下來之後,有幾處錯誤,但當時我並不慌,因為我相信VS強大的IDE。然而在我讓VS自行修改之後,卻發現有一個函數無論如何都無法通過
就是這裏的GetBufferAsync,當時我是有點小慌的,在反復撤銷檢查之後,我才發現在對httpClient進行自動修復時,選擇第二項就可完美運行,而上圖是修改時候運行正常之後才截的。
public async Task<StorageFile> Load() { try { var httpClient = new HttpClient(); var buffer = await httpClient.GetBufferAsync(new Uri(mybox.Text)); var file = await KnownFolders.MusicLibrary.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting); using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { await stream.WriteAsync(buffer); await stream.FlushAsync(); } Uri pathUri = new Uri(mybox.Text); media.Source = pathUri; media.Play(); return file; } catch { } return null; }
在我仿照文檔寫完程序運行之後,發現不管怎麽點我的音樂文件夾下都是空空如也,完全找不到本應緩存下來的neusong.mp3。知道我發現了這篇文檔https://docs.microsoft.com/zh-cn/windows/uwp/files/file-access-permissions,我才明白這個程序並沒有訪問音樂文件夾的權限,修改一下就可以了。
這回我們再運行,OK,完美,讓我插會兒腰~
GitHub項目地址:https://github.com/wangzhexiwen/Simple-Media
可視化作業——簡單播放器的更新