blob: bee6c370027d71827fe53389c1f2224668d8e178 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="CameraUI" >
<fx:Script>
<![CDATA[
private var cameraUI:CameraUI;
private var mpLoader:Loader;
protected function launchCameraUI(event:MouseEvent):void
{
if( CameraUI.isSupported )
{
cameraUI= new CameraUI();
cameraUI.addEventListener(MediaEvent.COMPLETE, onCameraUIComplete);
cameraUI.addEventListener(Event.CANCEL, onCameraUICanceled);
cameraUI.addEventListener(ErrorEvent.ERROR, onCameraError);
cameraUI.launch(MediaType.IMAGE);
}
else
{
trace( "Camera interface is not supported.");
}
}
private function onCameraUIComplete(e:MediaEvent):void
{
/*cameraUI.removeEventListener(MediaEvent.COMPLETE, onCameraUIComplete);
cameraUI.removeEventListener(Event.CANCEL, onCameraUICanceled);
cameraUI.removeEventListener(ErrorEvent.ERROR, onCameraError);*/
var mediaPromise:MediaPromise = e.data;
this.mpLoader = new Loader();
this.mpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMediaPromiseLoaded);
/*this.mpLoader.addEventListener(IOErrorEvent.IO_ERROR, onMediaPromiseLoadError);*/
this.mpLoader.loadFilePromise(mediaPromise);
}
private function onMediaPromiseLoaded(e:Event):void
{
var mpLoaderInfo:LoaderInfo = e.target as LoaderInfo;
mpLoaderInfo.removeEventListener(Event.COMPLETE, onMediaPromiseLoaded);
/* mpLoaderInfo.loader.removeEventListener(IOErrorEvent.IO_ERROR, onMediaPromiseLoadError);*/
this.image.source = mpLoaderInfo.loader;
}
protected function onCameraUICanceled(event:Event):void
{
trace("Camera canceled");
}
protected function onCameraError(event:ErrorEvent):void
{
trace();
}
protected function buttonHandler(event:MouseEvent):void
{
if(currentState == "DemoState")
{
currentState = "InfoState";
}
else if(currentState == "InfoState")
{
currentState = "DemoState";
}
}
]]>
</fx:Script>
<s:states>
<s:State name="DemoState"/>
<s:State name="InfoState"/>
</s:states>
<fx:Declarations>
<s:MultiDPIBitmapSource id="aboutIcon" source160dpi="@Embed('assets/icons/160/about.png')" source240dpi="@Embed('assets/icons/240/about.png')"
source320dpi="@Embed('assets/icons/320/about.png')" source480dpi="assets/icons/480/about.png"/>
<s:MultiDPIBitmapSource id="demoIcon" source160dpi="@Embed('assets/icons/160/dock.png')" source240dpi="@Embed('assets/icons/240/dock.png')"
source320dpi="@Embed('assets/icons/320/dock.png')" source480dpi="assets/icons/480/dock.png"/>
</fx:Declarations>
<s:Rect left="10" right="10" top="10" bottom="10" radiusX="5" radiusY="5">
<s:fill>
<s:SolidColor color="#FFFFFF"/>
</s:fill>
</s:Rect>
<s:Button label="Launch Camera UI" click="launchCameraUI(event)" horizontalCenter="0" verticalCenter="0" />
<s:Image id="image" scaleMode="letterbox" top="15" left="15" right="15" bottom="15" />
<s:TextArea includeIn="InfoState" selectable="false" left="10" right="10" top="10" bottom="10" editable="false" text="The CameraUI class allows you to capture a still image or video using the default camera application on a device.
&#xd; &#xd;The launch() method requests that the device open the default camera application. The captured image or video is available in the MediaEvent object dispatched for the complete event. Since the default camera application can save the image or video in a variety of formats, there is no guarantee that returned media object can be loaded and displayed by the AIR runtime.
&#xd; &#xd;On some platforms, the media object returned by the camera is accessible as a file-based media promise. On others, the media promise is not file-based and the file and relativePath properties of the MediaPromise object are null. Do not use these properties in code that is used on more than one platform.
&#xd; &#xd;On Android, the default camera application does not open if the external storage card is not available (such as when the user has mounted the card as a USB mass storage device). In addition, the AIR application that launches the camera loses focus. If the device runs low on resources, the AIR application can be terminated by the operating system before the media capture is complete.
&#xd; &#xd;On some platforms, the media object is automatically stored in the device media library. On platforms on which images and video are not automatically stored by the default camera application, you can use the CameraRoll addBitmapData() function to store the media object."/>
<s:navigationContent>
<s:Button click="navigator.popView()">
<s:icon>
<s:MultiDPIBitmapSource source160dpi="@Embed('assets/icons/160/1_navigation_previous_item.png')"
source240dpi="@Embed('assets/icons/240/1_navigation_previous_item.png')"
source320dpi="@Embed('assets/icons/320/1_navigation_previous_item.png')"/>
</s:icon>
</s:Button>
</s:navigationContent>
<s:actionContent>
<s:Button click="buttonHandler(event)" icon.DemoState="{aboutIcon}" icon.InfoState="{demoIcon}"/>
</s:actionContent>
</s:View>