Windows phone開發——通過sliverlight開發應用,關於播放背景音樂的問題

1、首先從Windows Phone應用開發中,要用到播放音樂開始說起,目前微軟對這個限制的比較嚴格,如果有第三方音樂播放器在播放音樂,那麼當前打開的應用如果需要播放背景音樂的話,就要做出提示,否則是不能通過微軟的審覈的,自此,開始了一系列蛋疼的研究,不過過程一下,還是很高興的。

1)、先引入庫文件

using Microsoft.Xna.Framework.Media;

我的做法是直接在程序開頭加一個判斷,此方法也是網上流傳的方法

 if (!MediaPlayer.GameHasControl)
            {
                if (MessageBox.Show("當前有程序正在播放音樂,你最好先關閉其他正在播放音樂的程序,否則無法使用當前程序的部分功能!", "小提示!",
            MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                {
                    MediaPlayer.Stop();
                    MainPage.canPlay = true;
                }
                else
                {
                    MainPage.canPlay = false;
                }
              
            }
            else
            {
                canPlay = true;
            }
2)、通過在主界面設置的靜態來達到控制是否可以播放背景音樂的,之後由於沒有真機,認爲已經沒有問題了,便直接上傳了,但是過了幾天,審覈不通過。。。。

看審覈結果:


主要就是說有異常出現了,後來借了同事真機測試,發現是這麼一個錯誤

FrameworkDispatcher.Update has not been called. Regular FrameworkDispatcher.Update calls are necessary for fire and forget sound effects and framework events to function correctly. See http://go.microsoft.com/fwlink/?LinkId=193853 for details.

3、根據提供的鏈接發現,原來winphone裏面播放音樂原來還是蠻複雜的,通過該鏈接提供的方法,重新添加了一個Service,OK,終於不會崩潰了,但是,又出來一個蛋疼的問題。

在這樣的場景下:當前使用音樂播放器播放音樂,打開了自己的應用,進入主頁有提示,並點擊取消後,音樂繼續播放,點擊頁面跳轉按鈕,跳到第二個界面,音樂自動被停止。

苦思冥想之下,終於在XMAL佈局文件裏發現問題了:

<MediaElement Name="animalVoice"  Source="....這裏省略原內容" AutoPlay="False" />
原來MediaElement默認直接初始化資源了,而winphone裏面播放音樂默認應該是一個單例,這樣,相當於改變了當前正在播放的音樂的資源,直接導致了音樂被停止,所以大家可以在構造方法裏面通過布爾值去判斷,如果當前沒有音樂在播放,則直接初始化,否則不初始化,我是這樣寫的:

 if (MainPage.canPlay)
            {
                Voice.Source =new Uri("/MyApplication;component/Resources/voice/voice0.mp3");
            }


根據上面的一些問題,我總結了一下:

1、如果應用中有播放音樂的需要,一定要做一個提示,否則無法通過微軟的審覈,這裏我使用的MessageBox


2、在sliverlight應用中,如果需要播放音樂,可以使用官方提供的,實現IApplicationService接口,直接在程序中註冊,參考鏈接:http://msdn.microsoft.com/library/ff842408.aspx,或者在需要播放音樂的地方動物的對XNA裏面的一個Game類進行更新,參考鏈接:http://blog.csdn.net/wam82197567/article/details/7563923


3、如果有MediaElement控件,最好不要在XAML佈局文件中對Source進行初始化,可以在構造方法中通過一個布爾值去判斷是否要初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章