在App中讀取Windows Phone 7手機內的音樂資源(Music Hub整合)
前陣子WP7 Marketplace當中有一隻HTC推出的免費App挺有趣,可以在App當中抓取顯示並撥放手機上的多媒體資源,諸如音樂檔案或是影片,先前我們在討論Silverlight開發技術的時候,並沒有看到API裡面有可以抓取到手機音樂的指令,第一次看到的時候著時讓我有些好奇,找了一下MSDN資料發現難怪之前沒看到,原來是出現在XNA這個Namespace底下。
我們可以透過底下的指令找到手機上的所有多媒體檔案:
當然,由於屬於XNA Framework的部分,請在使用前先在專案中Add Reference:
由於Silverlight的DataBinding技術,在listBox當中每一首點選的曲子,可透過底下的方式抓取到,甚至可以透過底下的程式碼,撥放選取的Item:
你不難發現,我們的App直接控制了WP7的Music Hub進行音樂的撥放。
如何存取照片資源呢??? 請參考這裡。
我們可以透過底下的指令找到手機上的所有多媒體檔案:
void MainPage_Loaded(object sender, RoutedEventArgs e) { //透過Xna抓取手機上的音樂 Microsoft.Xna.Framework.Media.MediaLibrary lib = new Microsoft.Xna.Framework.Media.MediaLibrary(); //Binding到ListBox上 this.ListBox1.ItemsSource = lib.Songs; }
當然,由於屬於XNA Framework的部分,請在使用前先在專案中Add Reference:
加入Microsoft.Xna.framework,接著即可使用前述的指令碼抓取到資料,如果你要像上述程式碼一樣把樂曲Binding到ListBox物件上,必須先幫ListBox設計Template:
然後將此Template使用在ListBox上:
如此一來就可以在自己開發的App中,呈現出手機上呈現出每一首歌的名稱,以及演唱者與專輯名稱:
由於Silverlight的DataBinding技術,在listBox當中每一首點選的曲子,可透過底下的方式抓取到,甚至可以透過底下的程式碼,撥放選取的Item:
private void button1_Click(object sender, RoutedEventArgs e) { if (this.ListBox1.SelectedItem == null) return; //取得選取的樂曲 Microsoft.Xna.Framework.Media.Song song = this.ListBox1.SelectedItem as Microsoft.Xna.Framework.Media.Song; //進行撥放 Microsoft.Xna.Framework.Media.Song item = song; Microsoft.Xna.Framework.Media.MediaPlayer.Play(item); }
在模擬器上也可以操作,你會發現我們的App與Music Hub可以整合在一起,在模擬器(RTW版本)上也有內建有三首曲子,可以方便我們進行測試。
你不難發現,我們的App直接控制了WP7的Music Hub進行音樂的撥放。
如果不想使用DataBinding的方式,您也可以用底下的程式碼列出每首歌的名字:
Microsoft.Xna.Framework.Media.MediaLibrary lib = new Microsoft.Xna.Framework.Media.MediaLibrary(); foreach (var item in lib.Songs) { //顯示樂曲名稱 MessageBox.Show(item.Name); }
透過這樣的方式,我們可以輕易地抓取到手機上的多媒體資源,並且和我們的App進行整合,也可以控制MusicHub的撥放,非常的方便。
留言