本來(lái)這次的作業(yè)應(yīng)該是接著上次簡(jiǎn)單的播放器做的琼了,然而我感覺上次的播放器有點(diǎn)難看逻锐,又想重新復(fù)習(xí)一下之前講過的各種控件,就重新做了一個(gè)播放器雕薪,功能比上次多了兩個(gè)昧诱,一個(gè)是在線播放,另一個(gè)是緩存所袁,這兩個(gè)功能說(shuō)難不難盏档,但說(shuō)簡(jiǎn)單坑還是不少的,接下來(lái)我們慢慢說(shuō)燥爷。
本次程序的代碼:https://github.com/cui-jia-hua/singleMediaPlayer
布局
因?yàn)檫@次是重新實(shí)現(xiàn)的播放器蜈亩,所以我想簡(jiǎn)單講一下我的布局,之前我使用了NavigetionView前翎,然而事實(shí)證明并不好看稚配,所以這次我選擇了SplitView,并且將打開文件與下載文件的按鈕放在了flyout中港华,這就使得界面變得清爽了不少道川,同時(shí)左側(cè)我使用的是ListView + ParallaxView,用來(lái)顯示本地已經(jīng)下載的文件。
參考博客:flyout菜單與事件https://blog.csdn.net/zmq570235977/article/details/50489330
在線播放功能
上次簡(jiǎn)單的實(shí)現(xiàn)了用戶播放本地文件的功能愤惰,總體來(lái)說(shuō)還是挺簡(jiǎn)單的苇经,而這次的第一個(gè)在線播放功能也不算難,相信大家都能發(fā)現(xiàn)宦言,這兩段代碼唯一不同就是文件路徑扇单,在線播放需要提供uri,并且Mediasource的方法需要改變一下奠旺,其他的只需要復(fù)制粘貼就好了蜘澜。
下載媒體
本次任務(wù)的重點(diǎn)我覺得就在于將音頻下載到本地上,對(duì)于這一任務(wù)我找了好久的資料响疚,不過苦于c#本身博客較少鄙信,并且搜索的時(shí)候經(jīng)常會(huì)和安卓混在一起,導(dǎo)致進(jìn)度緩慢忿晕,最終通過官方文檔與其他同學(xué)的博客找到一種方法
這個(gè)方法可以順利的將媒體下載到用戶的音樂文件夾下
同時(shí)装诡,經(jīng)過測(cè)試,無(wú)論下載的是音頻還是視頻践盼,該代碼均可以將其下載到本地并能夠順利播放鸦采。
參考:下載文件 https://docs.microsoft.com/zh-cn/windows/uwp/files/quickstart-managing-folders-in-the-music-pictures-and-videos-libraries#get-notified-of-changes-to-the-list-of-folders-in-a-library
https://docs.microsoft.com/en-us/uwp/api/windows.web.http.httpclient.getbufferasync#Windows_Web_Http_HttpClient_GetBufferAsync_Windows_Foundation_Uri_
播放
僅僅下載到本地是不夠的,我覺得應(yīng)該讓這個(gè)播放器能夠播放已經(jīng)下載到本地的媒體文件咕幻,ListView顯示出當(dāng)前用戶音樂文件夾下的所有文件渔伯,并通過用戶點(diǎn)擊來(lái)進(jìn)行播放。這個(gè)功能聽起來(lái)簡(jiǎn)單肄程,但實(shí)現(xiàn)的時(shí)候我仍是飛了不少功夫锣吼,首先是需要再ListView上把當(dāng)前用戶音樂文件夾下的所有文件顯示出來(lái),通過動(dòng)態(tài)創(chuàng)建ListViewItem的方法蓝厌,我檢查當(dāng)前文件夾下的所有文件玄叠,并創(chuàng)建ListViewItem,將它們插入到ListView中褂始。在每一次添加之前還需要清除诸典,否則就會(huì)重復(fù)添加描函,清除當(dāng)前ListView中所有元素的方式是這個(gè):https://www.cnblogs.com/zchenjian/p/6244081.html
其次ListView的參考代碼較少崎苗,不知道如何獲取用戶選擇的選項(xiàng)。這一問題我是一點(diǎn)一點(diǎn)試出來(lái)的舀寓,程序如下
僅僅獲取當(dāng)前item的文本是不夠的胆数,我們還需要找到用戶的音樂文件夾路徑,在那個(gè)路徑下找到用戶選擇的item互墓,就可以順利播放了必尼。
參考文檔:ItemClickEventArgs方法:https://msdn.microsoft.com/zh-tw/library/windows/apps/windows.ui.xaml.controls.itemclickeventargs.aspx