WP7 Dev Tip: Detecting whether or not the user is playing music in the background


Applies To: Silverlight & XNA

Quick Bits

Microsoft.Xna.Framework.Media.MediaPlayer.GameHasControl

The Setup

Your app does some sort of music playing that doesn’t make sense to blend into any already playing background music (for example, you’re going to stream your own music) or you simply want to show a video.

Why You Care?

If you just start playing music you will fail certification according to section 6.5.1 of the certification guide if you don’t ask the user if you can stop the background music, but how can you stop the background music if you don’t know it’s playing? Hence, you care!

The Solution

Query Microsoft.Xna.Framework.Media.MediaPlayer.GameHasControl (it’s a bool) – if you have control, then you’re good to go. If you don’t have control, then there is something in the background and you need to prompt the user before continuing. 

Silverlight Note: you’ll need to link in Microsoft.Xna.Framework.dll for this to work, but make sure you don’t distribute this file with your XAP by mistake (or you’ll also fail certification for redistributing phone assemblies)

Comments (2)

  1. Alex says:

    Oren, can I use Xna.Framework in Silverlight Application for WP7?

  2. orena says:

    Hey Alex,

    Yes, you can link to Xna.Framework and then use the Media namespace. The certification guide has the following to say about using Xna libraries from Silverlight:

    "4.2.5 The application must not call any APIs in the Microsoft.Xna.Framework.Game assembly or the Microsoft.Xna.Framework.Graphics assembly when using any methods from the System.Windows.Controls namespace."

    There's a lot of useful libraries in XNA that you can use from Silverlight, especially the different media manipulation ones (for example, you can play media as a SoundEffect (Micorosoft.Xna.Framework.Audio.SoundEffect) to have it mixed in with whatever is current playing in the background.

    Hope that helps!