Adobe Flex Mobile выбирает изображение с камеры или делает снимок, перезапускает приложение - PullRequest
0 голосов
/ 19 января 2012

У меня есть гибкое мобильное приложение, над которым я работаю, и у меня возникают проблемы с выбором изображения из рулона / фотографированием.Мое приложение не имеет вкладок, однако одна его часть содержит навигатор с вкладками и вкладками в нижней части.На одной из этих вкладок у меня есть возможность загрузить изображение в созданный мной веб-сервис.Однако, когда я выбираю изображение или делаю снимок, оно возвращается к начальному экрану-заставке, и приложение перезагружается.Если я использую автономный компонент (вне навигатора представления с вкладками), он выбирает изображение и загружает без проблем.

<s:TabbedViewNavigator id="tvn" width="100%" height="100%">
    <s:ViewNavigator icon="@Embed('assets/icons/contact.png')"  label="contact" width="100%" height="100%" firstView="Concern.ContactInfo" firstViewData="{data}"/>
    <s:ViewNavigator icon="@Embed('assets/icons/notes.png')" label="details" width="100%" height="100%" firstView="Concern.Description"  firstViewData="{data}"/>
    <s:ViewNavigator icon="@Embed('assets/icons/updates.png')" label="updates" width="100%" height="100%" firstView="Concern.Updates"  firstViewData="{data}"/>
    <s:ViewNavigator icon="@Embed('assets/icons/upload.png')" label="uploads" width="100%" height="100%" firstView="Concern.Uploads" firstViewData="{data}"/>
</s:TabbedViewNavigator>

Concern.Uploads:

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

private var urlRequest:URLRequest = новый ULRequest ("http://mywebservice.php"); частный файл var: File;

        //take a new picture with the camera
        protected function uploadCamera_clickHandler(event:MouseEvent):void
        {
            if (CameraUI.isSupported)
            {
                trace("camera is supported");
                var myCam:CameraUI = new CameraUI();
                myCam.launch(MediaType.IMAGE);
                myCam.addEventListener(MediaEvent.COMPLETE,selectCompleteHandler);
            }
            else
            {
                trace("camera not supported");
                statusText.text = "Camera not supported on this device.";
            }
        }

        //select a picture from the camera roll (gallery)
        protected function uploadGallery_clickHandler(event:MouseEvent):void
        {
            if (CameraRoll.supportsBrowseForImage)
            {
                trace("camera roll is supported");
                var roll:CameraRoll = new CameraRoll();
                roll.browseForImage();
                roll.addEventListener(MediaEvent.SELECT,selectCompleteHandler);
            }
            else
            {
                trace("camera roll not supported");
                statusText.text = "Camera roll not supported on this device.";
            }
        }

        //when the selection is complete upload it
        protected function selectCompleteHandler(event:MediaEvent):void
        {
            trace("event.data.file.url; = "+event.data.file.url);
            takePhotoButton.enabled = galleryPhotoButton.enabled = false;
            file = event.data.file;
            file.addEventListener(Event.COMPLETE,uploadCompleteHandler);
            file.addEventListener(Event.OPEN,openUploadHandler);
            urlRequest = new URLRequest("http://MyWebService.php?ID=" + data.ID.toString());
            statusText.text = "Uploading please wait...";
            file.upload(urlRequest);                
        }

        protected function uploadCompleteHandler(event:Event):void
        {
            trace("upload complete");
            takePhotoButton.enabled = galleryPhotoButton.enabled = true;
            statusText.text = "Photo Uploaded";
        }

        protected function openUploadHandler(event:Event):void
        {
            trace("uploading");
            statusText.text = "Uploading...";
        }
    ]]>
</fx:Script>
<s:Image source="@Embed('assets/i/logo.jpg')" horizontalAlign="center" horizontalCenter="0" bottom="0"/>
<s:Label width="100%" id="res" textAlign="left"/>
<s:Scroller width="100%" height="100%">
    <s:VGroup width="100%" height="100%" verticalAlign="top" paddingLeft="15" paddingRight="15" horizontalAlign="center">
        <s:VGroup width="100%" paddingTop="15">
            <s:Label text="My Header" styleName="cityTitle" width="100%">
                <s:filters>
                    <s:DropShadowFilter color="#000000"/>
                </s:filters>
            </s:Label>
            <s:Label text="Portal" styleName="citySubtitle" width="100%">
                <s:filters>
                    <s:DropShadowFilter color="#000000"/>
                </s:filters>
            </s:Label>
        </s:VGroup>
        <s:VGroup horizontalAlign="center" gap="25" width="100%">
            <s:Button id="takePhotoButton" label="Take Photo" click="uploadCamera_clickHandler(event)" minHeight="50" width="50%"/>
            <s:Button id="galleryPhotoButton" label="From Gallery"
                      click="uploadGallery_clickHandler(event)" minHeight="50" width="50%"/>                
            <s:Label id="statusText" fontSize="24" text="" color="#FFFFFF"/>                
        </s:VGroup>
    </s:VGroup>
</s:Scroller>

Заранее благодарен за любую помощь.

JH

1 Ответ

0 голосов
/ 31 января 2012

Я получил похожее поведение и недавно добавил свои идеи к другому вопросу .В заметках о выпуске AIR 2.5 я увидел что-то, что Android может убить ваш процесс, когда у камеры мало ресурсов.

Я думаю, что это FOL, по крайней мере, некоторое время, я подал отчет об ошибке (# 3099508) с Adobe.Я обнаружил, что если я отключу данные и GPS, поэтому, уменьшив ресурсы, используемые в настоящее время, у меня больше шансов на это.Очень расстраивает, но я не видел никакого обходного пути.В моем приложении я собираюсь обнаружить ситуацию, сделав заметку (общий объект), когда я нажимаю кнопку перед переходом к камере, затем очищаю ее, когда она возвращается, но если приложение запускается с этим набором заметок, я добавлюдиалоговое окно с советами уменьшить ресурсы, и это ошибка AIR.

...