Detecting What is Supported

by kirupa   |   12 July 2011

  Have questions? Discuss this Flash / AS3 tutorial with others on the forums.

The Flash Player does a good job of allowing you to focus on creating cool content that works on a wide range of devices. Despite that, there are a handful of Flash features that not all devices support. An example of this is using the webcam on a device that doesn't actually have a webcam.

To help you gracefully handle situations where what you expect and what the device your content will be viewed on supports are not the same, you have the flash.system.Capabilities API.

The following is an example that uses this API to show you what Flash features your system supports:

Get Adobe Flash player

The above list uses almost all of the functions found in the Capabilities API to return whether a feature is supported or provide information on system settings such as the CPU, OS, Flash Player version, etc.

You can download the source code (Flash CS5.5 and CS4) for the above project or just glance at the various functions starting with Capabilities I used below:

public function WhatToSupport() {
// constructor code
this.addEventListener(Event.ADDED_TO_STAGE, DetermineCapabilities);
}
private function DetermineCapabilities(e:Event)
{
SetEnabledOrDisabled(Capabilities.avHardwareDisable, cameraMicrophone);
SetEnabledOrDisabled(Capabilities.hasAccessibility, accessibility);
SetEnabledOrDisabled(Capabilities.hasAudio, audioPlayback);
SetEnabledOrDisabled(Capabilities.hasAudioEncoder, encodingAudio);
SetEnabledOrDisabled(Capabilities.hasEmbeddedVideo, embeddedVideo);
SetEnabledOrDisabled(Capabilities.hasIME, imeInstalled);
SetEnabledOrDisabled(Capabilities.hasMP3, mp3decoder);
SetEnabledOrDisabled(Capabilities.hasPrinting, printing);
SetEnabledOrDisabled(Capabilities.hasScreenBroadcast, screenbroadcast);
SetEnabledOrDisabled(Capabilities.hasScreenPlayback, screenplayback);
SetEnabledOrDisabled(Capabilities.hasStreamingAudio, streamingAudio);
SetEnabledOrDisabled(Capabilities.hasStreamingVideo, streamingVideo);
SetEnabledOrDisabled(Capabilities.hasTLS, sslSockets);
SetEnabledOrDisabled(Capabilities.hasVideoEncoder, encodingVideo);
SetEnabledOrDisabled(Capabilities.isDebugger, debugVersion);
SetEnabledOrDisabled(Capabilities.isEmbeddedInAcrobat, embeddedPDF);
SetEnabledOrDisabled(Capabilities.localFileReadDisable, hardDrive);
SetEnabledOrDisabled(Capabilities.supports32BitProcesses, thirtyTwoBit);
SetEnabledOrDisabled(Capabilities.supports64BitProcesses, sixtyFourBit);
touchScreen.text = Capabilities.touchscreenType;
flashVersion.text = Capabilities.version;
cpu.text = Capabilities.cpuArchitecture;
language.text = Capabilities.language;
manufacturer.text = Capabilities.manufacturer;
h264idc.text = Capabilities.maxLevelIDC;
osValue.text = Capabilities.os;
pixelaspectratio.text = Capabilities.pixelAspectRatio.toString();
runtimeEnvironment.text = Capabilities.playerType;
screenColor.text = Capabilities.screenColor;
screenDPI.text = Capabilities.screenDPI.toString();
horizontalResolution.text = Capabilities.screenResolutionX.toString();
verticalResolution.text = Capabilities.screenResolutionY.toString();
}
private function SetEnabledOrDisabled(supported:Boolean, yesOrNoInstance:MovieClip)
{
if (supported)
{
yesOrNoInstance.gotoAndStop(1);
}
else
{
yesOrNoInstance.gotoAndStop(2);
}
}

I am not going to describe the various functions in this article, for Adobe's Documentation on this is fantastic. Just read the documentation and refer to the source code and example you see in this page for some guidance to see how it is used.

Conclusion

There you have it - an introduction to the easy-to-use Capabilities API via a sample project and Adobe's documentation. If you are ever using a feature whose existence is dependent on the device your content will be viewed on, strongly consider checking to see if the feature exists and giving users some notice about why your content won't work as expected for them!

Getting Help

If you have questions, need some assistance on this topic, or just want to chat - post in the comments below or drop by our friendly forums (where you have a lot more formatting options) and post your question. There are a lot of knowledgeable and witty people who would be happy to help you out

Share

Did you enjoy reading this and found it useful? If so, please share it with your friends:

If you didn't like it, I always like to hear how I can do better next time. Please feel free to contact me directly via e-mail, facebook, or twitter.

Brought to you by...

Kirupa Chinnathambi
I like to talk a lot - A WHOLE LOT. When I'm not talking, I've been known to write the occasional English word. You can learn more about me by going here.

Add Your Comment (or post on the Forums)

blog comments powered by Disqus

Awesome and high-performance web hosting!
BACK TO TOP
new books - yay!!!