欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Windows phone开发——通过sliverlight开发应用,关于播放背景音乐的问题

程序员文章站 2022-06-23 10:03:13
1、首先从Windows Phone应用开发中,要用到播放音乐开始说起,目前微软对这个限制的比较严格,如果有第三方音乐播放器在播放音乐,那么当前打开的应用如果需要播放背景音乐的话,...
1、首先从Windows Phone应用开发中,要用到播放音乐开始说起,目前微软对这个限制的比较严格,如果有第三方音乐播放器在播放音乐,那么当前打开的应用如果需要播放背景音乐的话,就要做出提示,否则是不能通过微软的审核的,自此,开始了一系列蛋疼的研究,不过过程一下,还是很高兴的。

1)、先引入库文件

[csharp]  

using Microsoft.Xna.Framework.Media;  

我的做法是直接在程序开头加一个判断,此方法也是网上流传的方法

[csharp]  

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 https://go.microsoft.com/fwlink/?LinkId=193853 for details.

3、根据提供的链接发现,原来winphone里面播放音乐原来还是蛮复杂的,通过该链接提供的方法,重新添加了一个Service,OK,终于不会崩溃了,但是,又出来一个蛋疼的问题。

在这样的场景下:当前使用音乐播放器播放音乐,打开了自己的应用,进入主页有提示,并点击取消后,音乐继续播放,点击页面跳转按钮,跳到第二个界面,音乐自动被停止。

苦思冥想之下,终于在XMAL布局文件里发现问题了:

[html]  

<MediaElement Name="animalVoice"  Source="....这里省略原内容" AutoPlay="False" />  

原来MediaElement默认直接初始化资源了,而winphone里面播放音乐默认应该是一个单例,这样,相当于改变了当前正在播放的音乐的资源,直接导致了音乐被停止,所以大家可以在构造方法里面通过布尔值去判断,如果当前没有音乐在播放,则直接初始化,否则不初始化,我是这样写的:

[csharp]  

if (MainPage.canPlay)  

           {  

               Voice.Source =new Uri("/MyApplication;component/Resources/voice/voice0.mp3");  

           }  

 

 

根据上面的一些问题,我总结了一下:

1、如果应用中有播放音乐的需要,一定要做一个提示,否则无法通过微软的审核,这里我使用的MessageBox

 

2、在sliverlight应用中,如果需要播放音乐,可以使用官方提供的,实现IApplicationService接口,直接在程序中注册,参考链接:https://msdn.microsoft.com/library/ff842408.aspx,或者在需要播放音乐的地方动物的对XNA里面的一个Game类进行更新,参考链接:https://blog.csdn.net/wam82197567/article/details/7563923

 

3、如果有MediaElement控件,最好不要在XAML布局文件中对Source进行初始化,可以在构造方法中通过一个布尔值去判断是否要初始化