First off, all of this code is very hard to read in an email format. Can you post this into a gist or bitbucket and have us see it there? Also, can you remove the unnecessary parts, so we can just see the basic functionality you are trying to achieve?
Thanks! On Tue, May 14, 2013 at 11:28 AM, Jesse Hellyer <[email protected]> wrote: > 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> > > > > -- JP Bader Principal Zavteq, Inc. @lordB8r | [email protected] 608.692.2468
