I used to use Xternal Display until I got a RAZR Maxx that has ICS and the app doesn't work anymore. Xternal Display actually has their code posted online so I downloaded it and tried to see if there were any changes that would allow it to work with ICS. Turns out Motorola had an HDMI API that it discontinued for ICS. This API is what Xternal Display used and without it, there is not an easy way of making the app work on 4.0+.
After some work I did come up with a new solution so I can get NFL mobile mirrored to my TV! You must have the Android SDK tools installed and the Developer driver from Motorola installed for this to work. You can download the driver at
https://developer.motorola.com/tools/usb_drivers/handset_usb_driver/
- Connect HDMI cable to phone and connect USB to computer and phone
- Open up command prompt and change directory to your SDK folder/platform-tools. For me, that is C:\Android-sdk\platform-tools
- Send the following without the quotes: "adb shell am broadcast -a com.motorola.intent.action.externaldisplaystate --ei hdmi 0 --ei hdcp 1"
- Open up NFL Mobile and enjoy it on a bigger screen!
NFL Mobile looks for broadcasts that indicate the state of the HDMI port and stops accessing the streaming content when it sees that HDMI has been plugged in. By sending a command over the ADB interface, we are effectively tricking NFL mobile into thinking that the HDMI cable has been removed! It's not quite as nice as Xternal Display was since it's not just an app on the phone anymore, but at least there is a way!