2011年10月31日 星期一

在App中讀取Windows Phone 7手機內的音樂資源(Music Hub整合)

前陣子WP7 Marketplace當中有一隻HTC推出的免費App挺有趣,可以在App當中抓取顯示並撥放手機上的多媒體資源,諸如音樂檔案或是影片,先前我們在討論Silverlight開發技術的時候,並沒有看到API裡面有可以抓取到手機音樂的指令,第一次看到的時候著時讓我有些好奇,找了一下MSDN資料發現難怪之前沒看到,原來是出現在XNA這個Namespace底下。

我們可以透過底下的指令找到手機上的所有多媒體檔案:
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,接著即可使用前述的指令碼抓取到資料,如果你要像上述程式碼一樣把樂曲BindingListBox物件上,必須先幫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版本)上也有內建有三首曲子,可以方便我們進行測試。

當你在開發測試環境當中,使用模擬器時,也可以按下鍵盤上的F9, F10按鍵,這時可以模擬手機音量鈕,呈現出左方的畫面。


你不難發現,我們的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的撥放,非常的方便。

如何存取照片資源呢??? 請參考這裡

1 則留言:

匿名 提到...

很多多媒體相關的API都在XNA裡面(silverlight不見得有),包括讀取圖檔、music、vedio…等