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!

If you have a question about this or any other topic, the easiest thing is to drop by our forums where a bunch of the friendliest people you'll ever run into will be happy to help you out!

THE KIRUPA NEWSLETTER

Get cool tips, tricks, selfies, and more...personally hand-delivered to your inbox!

( View past issues for an idea of what you've been missing out on all this time! )

WHAT DO YOU THINK?

blog comments powered by Disqus

NEWSLETTER

No spam. No fluff. Just awesome content sent straight to your inbox!

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