I have been having very slow results with the CameraUI in flex.
Initially, I was using version 3.1 which was VERY buggy, and I was
running into erroring out returning from the CameraUI, and very slow
speeds.

 

I have since downloaded and installed the newest Apache Flex framework,
4.9.1.   The CameraUI returns VERY fast on our Samsung Tab 7.1 that we
bought a few months ago.  On an older Droid Charge phone, that is up to
date with updates, it takes 30-40 seconds to return from the CameraUI
into my code.  Same with an iPhone 4 running iOS 6.1.   

 

The line in question is marked in yellow below:
mpLoader.loadFilePromise(mediaPromise);

 

Can anyone help me here?  Code below:

 

<?xml version="1.0" encoding="utf-8"?>

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009";
xmlns:mx="library://ns.adobe.com/flex/mx" 

              xmlns:s="library://ns.adobe.com/flex/spark"
initialize="init(event)">

       <s:titleContent>

              <s:VGroup horizontalAlign="center" verticalAlign="middle"
width="100%">

                     <s:Label text="iOS" fontSize.phone="14"
fontSize.tablet="20"  color="white" fontWeight="bold">   </s:Label>

              </s:VGroup>

       </s:titleContent>

       

       

       

       <fx:Script>

              <![CDATA[

                     import flash.utils.ByteArray;

                     import mx.collections.ArrayCollection;

                     import mx.core.FlexGlobals;

                     import mx.events.FlexEvent;

                     import mx.managers.PopUpManager;

                     import mx.rpc.events.FaultEvent;

                     import mx.rpc.events.ResultEvent;

                     import org.bytearray.images.JPEGEncoder; 

                     import services.mobiledata2.MobileData2;

                     

                     private var dataSave2:MobileData2 = new
MobileData2();

                     

                     [Bindable]

                     public var saveResult:String = "";

                     

                     public var isTablet:Boolean;

                     public var isPortrait:Boolean;

                     public var ba:ByteArray;

                     

                     private var cameraUI:CameraUI

                     private var jpgEncoder: JPEGEncoder;

                     

                     protected function
button1_clickHandler(event:MouseEvent):void

                     {

                           

                           if( CameraUI.isSupported )

                           {                    

                                  cameraUI = new CameraUI();

                                  

 
cameraUI.addEventListener(MediaEvent.COMPLETE, onComplete);

 
cameraUI.addEventListener(Event.CANCEL, cameraCancel);

 
cameraUI.addEventListener(ErrorEvent.ERROR, cameraError);

                                  

                                  cameraUI.launch(MediaType.IMAGE);

                           }

                           else

                           {

                                  var theAlert:AlertMsg1 = new
AlertMsg1();

                                  theAlert.open(this,true);

                                  PopUpManager.centerPopUp(theAlert);

                                  

                     

                           }

              

                     }

                     

                     protected function
onComplete(event:MediaEvent):void {

                           

                           //imageProblem.source = event.data.file.url;

                           imageInfo.visible = true;

                           imageInfo.text = "";

                           

                           

                           imageInfo.text += "-20";

                           

                           busyDesc2.visible = true;

                           busyDesc2.text += "before seconds: ";

                           

                           var mediaPromise:MediaPromise = event.data;

                           

                           imageInfo.text += "-19";

                           var mpLoader:Loader = new Loader();

                           imageInfo.text += "-18";

 
mpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
onMediaPromiseLoaded);

                           

                           imageInfo.text += "-17";

                           mpLoader.loadFilePromise(mediaPromise);

                           imageInfo.text += "-16";

                           

                     } 

                     

                     private function onMediaPromiseLoaded(e:Event):void

                     {

                           var mpLoaderInfo:LoaderInfo = e.target as
LoaderInfo;

                           imageInfo.text += "-15";

 
mpLoaderInfo.removeEventListener(Event.COMPLETE, onMediaPromiseLoaded);

 

                           var bitmap:Bitmap =
mpLoaderInfo.loader.content as Bitmap;

                           imageInfo.text += "-11";

 

                           

                           imageInfo.text += "-10.5";               

       

                           jpgEncoder = new JPEGEncoder( 20 );

                           imageInfo.text += "-9";

                           

                           ba = jpgEncoder.encode( bitmap.bitmapData);

 

                           imageInfo.text += "-8";

                           

                           //j = null;

                           

                           

                           jpgEncoder = null;

                           bitmap = null;

                            

                           doPictureSave();

                     }

                     

                     

                     private function doPictureSave():void

                     {

                           //do something with the data

                           imageInfo.visible = true;

                           imageInfo.text += "1";

                           

                           var actionCollection:ArrayCollection = new
ArrayCollection();

                           actionCollection.addItem(new String(""));
//add a blank string so no null values are passed

                           

                           if (registration.selected){

                                  var theItem:String = "Registration";

                                  actionCollection.addItem(theItem);

                           }

                           if (rebate.selected){

                                  var theItem2:String = "Rebate";

                                  actionCollection.addItem(theItem2);

                           }

                           if (demo.selected){

                                  var theItem3:String = "Demo";

                                  actionCollection.addItem(theItem3);

                           }

                           if (bid.selected){

                                  var theItem4:String = "Bid";

                                  actionCollection.addItem(theItem4);

                           }

                           if (fleet.selected){

                                  var theItem5:String = "Fleet";

                                  actionCollection.addItem(theItem5);

                           }

                           if (other.selected){

                                  var theItem6:String = "Other - " +
txtOther.text;

                                  actionCollection.addItem(theItem6);

                           }

                           

                           imageInfo.text += "2.5";

                           

                           

                           dataSave2.addEventListener("result",
saveImage_Result);

                           dataSave2.addEventListener("fault",
saveImage_Failed); 

                           

                           //*** HERE IS WHERE WE SEND TO A WEB SERVICE,
code removed for proprietary reasons ***

                           

                           

                     }

                     

                     

                     private function
saveImage_Result(evt:ResultEvent):void {

                           var idNum:int;

                           

                           dataSave2.removeEventListener("result",
saveImage_Result);

                           dataSave2.removeEventListener("fault",
saveImage_Failed);     

                           

                           //imageInfo.text += "result from web
service";

                           

                           if (evt.result != null)

                           {

                                  idNum = evt.result as int;

                                  

                                  busy.visible = false;

                                  busyDesc2.visible = true;

                                  busyDesc.visible = true;

                                  

                                  busyDesc.text = "Success - Image
sent.";// + error.toString();

 

                                  ba.clear();

                                  

                                  init(new FlexEvent("Init"));

                                  

                           }

                     }

                     private function
saveImage_Failed(evt:FaultEvent):void 

                     {

                           dataSave2.removeEventListener("result",
saveImage_Result);

                           dataSave2.removeEventListener("fault",
saveImage_Failed);     

                           

                           //imageInfo.text += "failure from web
service";

                           

                           busy.visible = false;

                           busyDesc.visible = true;

                           busyDesc.text = "Image Save failed at web
service level.  Error: " + evt.message.toString();

                           

                     }

                     

                     private function cameraError(evt:FaultEvent):void 

                     {

                           busy.visible = false;

                           busyDesc.visible = true;

                           busyDesc.text = "Camera IO error.  Error: " +
evt.message.toString();

                     }

                     private function cameraCancel(evt:Event):void 

                     {

                           busy.visible = false;

                           busyDesc.visible = true;

                           busyDesc.text = "Camera cancelled.";

                     }

                     

                     protected function init(event:FlexEvent):void

                     {

                           

                           registration.selected = true;

                           rebate.selected = false;

                           bid.selected = false;

                            fleet.selected = false;

                           demo.selected = false;

                           other.selected = false;

                           txtOther.text = "";

                     }

                     

                     protected function
button2_clickHandler(event:MouseEvent):void

                     {

                           // TODO Auto-generated method stub

 
navigator.pushView(views.ViewExistingRegistrationRequests);

                     }

                     

                     

              ]]>

       </fx:Script>

       

       <fx:Declarations>

              <fx:Component className="AlertMsg1"> 

                     <s:SkinnablePopUpContainer width="70%">

                           <s:Panel title="Camera Not Available">

                                  <s:VGroup horizontalAlign="center"
paddingTop="20" gap="20">

                                         <s:Label id="alertLbl"
width="200" textAlign="center" text="Camera is not supported on this
device."/>

                                         <s:Button label="OK"
click="close();"/>

                                  </s:VGroup>

                           </s:Panel>

                           

                     </s:SkinnablePopUpContainer>

              </fx:Component>

              <fx:Component className="PictureMsg1"> 

                     <s:SkinnablePopUpContainer width="70%"> 

                           <s:Panel title="Picture Save">

                                  <s:VGroup horizontalAlign="center"
paddingTop="20" gap="20">

                                         <s:Label id="picLabel"
width="200" textAlign="center"/>

                                         <s:Button label="OK"
click="close();"/>

                                  </s:VGroup>

                           </s:Panel>

                           

                     </s:SkinnablePopUpContainer>

              </fx:Component>

       </fx:Declarations>

       <s:states>

              <s:State name="portraitPhone"
stateGroups="phone,portrait"/>

              <s:State name="landscapePhone"
stateGroups="phone,landscape"/>

              <s:State name="portraitTablet"
stateGroups="tablet,portrait"/>

              <s:State name="landscapeTablet"
stateGroups="tablet,landscape"/>

       </s:states>

       <s:VGroup paddingTop="8" paddingLeft.tablet="8"
paddingLeft.phone="4" width="100%">

              <s:TextArea id="serviceDesc" fontSize.tablet="20"
width="85%" fontSize="14" text="Please select what you would like KPM to
submit this unit for:"></s:TextArea>

              <s:VGroup paddingLeft="18">

                     <s:HGroup>

                           <s:CheckBox id="registration"
width.phone="150" width.tablet="250" fontSize.phone="12"
fontSize.tablet="16" label="Product Registration" selected="true" />

                           <s:Spacer width.phone="12%"
width.tablet="20%">

                           </s:Spacer>

                           <s:CheckBox id="rebate" fontSize.phone="12"
fontSize.tablet="16"  label="Rebate" />    </s:HGroup>

                     <s:HGroup>

                           <s:CheckBox id="bid" width.phone="150"
width.tablet="250" fontSize.phone="12" fontSize.tablet="16" label="Bid
Credit" />

                           <s:Spacer  width.phone="12%"
width.tablet="20%">

                           </s:Spacer>

                           <s:CheckBox id="fleet" fontSize.phone="12"
fontSize.tablet="16"  label="Fleet Credit" /></s:HGroup>

                     <s:HGroup> 

                           <s:CheckBox id="demo" width.phone="150"
width.tablet="250" fontSize.phone="12" fontSize.tablet="16" label="Demo
Credit" />

                           <s:Spacer  width.phone="12%"
width.tablet="20%">

                           </s:Spacer>

                     </s:HGroup>

                     

                     <s:CheckBox id="other"  fontSize.phone="12"
fontSize.tablet="16" label="Other - Please enter below" />

                     <s:TextArea id="txtOther"
softKeyboardType="default" width="85%" height="20%" verticalAlign="top"
paddingBottom="15"></s:TextArea>

              </s:VGroup>

              <s:HGroup>

                     <s:Button label="Take Picture of Invoice"
click="button1_clickHandler(event)" fontSize="11"/>

                     <s:Button label="View Existing Requests"
click="button2_clickHandler(event)" fontSize="11"/>

              </s:HGroup>

              <s:VGroup paddingLeft="18">

                     <s:VGroup horizontalAlign="center" width="96%">

                           <s:HGroup verticalAlign="middle"
horizontalAlign="center" width="96%"> 

                                  <s:Label id="busyDesc"
fontSize.tablet="20" fontSize="18" text="Please wait..."
visible="false"></s:Label>

                                  <s:BusyIndicator id="busy" height="50"
width="50" visible="false"></s:BusyIndicator>

                           </s:HGroup>

                           <s:Label id="busyDesc2" fontSize.tablet="20"
fontSize="14" text="This may take up to 20 seconds to complete."
visible="false"></s:Label>

                           <s:Label id="imageInfo" fontSize.tablet="20"
fontSize="11" text="" visible="true"></s:Label>

                     </s:VGroup>

              </s:VGroup>

       </s:VGroup>

       

</s:View>

 

Reply via email to