Unable to delete media file on Android phone using AIR

[Check the last change in the second half for updates to the main problem]

My phone saves its pictures to an SD card. I use CameraUIto take a picture, and then I would like to analyze and delete it.

Code (simplified):

private function startCapture():void
{
    _camera = new CameraUI();
    _camera.addEventListener( MediaEvent.COMPLETE, onCapture );

    _camera.launch(MediaType.IMAGE); //works fine
}


private function onCapture(e:MediaEvent):void
{
    var loader:Loader = new Loader();

    _filePromise = e.data;
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onAsyncMediaComplete);
    loader.loadFilePromise(m__filePromise);
}


private function onAsyncMediaComplete(e:Event):void
{
    var loader:Loader = (e.currentTarget as LoaderInfo).loader; 
    //here the loader contains the picture as expected

    //FIXME adds an empty picture instead of deleting
    _filePromise.file.deleteFile();
}

I expect the image on the SD card to be deleted, but instead it is still there, and a new dummy file is created next to it. I traced the file url and gotstorage/sdcard0/DCIM/Camera/IMG_20131016_204700.jpg

My manifest manifest includes

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

EDIT:

, AIR : DCIM/Camera DCIM/100MEDIA. , DCIM (+ - 3 ) , event.data.file. . :

var date:Date = m__filePromise.file.modificationDate;
var size:Number = m__filePromise.file.size;
trace("looking for", date.time, size);
var cameraFolder:File = m__filePromise.file.parent.parent;
var pictureFolders:/*File*/Array = cameraFolder.getDirectoryListing();
var pictures:/*File*/Array;
for each(var folder:File in pictureFolders)
{
    pictures = folder.getDirectoryListing();
    for each(var pic:File in pictures)
    {
        if (pic.size == size &&
            Math.abs(pic.modificationDate.time - date.time) < 3000)
        {
            //approximatively the same date, same size, let delete the copy
            trace("delete", pic.modificationDate.time, pic.size, pic.name);
            pic.deleteFile();
        }
    }
}

, deleteFile , (0b) . , , , .

+4
1

, Android . Intent.ACTION_MEDIA_MOUNTED - MediaStore (, )

Camera . ,

    private var _video : Video;
    private var _cameraImage : Bitmap;
    private var _camera : Camera;

    /**
     * initilize camera
     */
    private function initCamera() : void {

        //get camera
        _camera = getCamera(CameraPosition.FRONT);
        _camera.setMode(_streamW, _streamH, streamFPS, true);
        _camera.setQuality(0, 100);
        _camPosition = CameraPosition.FRONT;

         //camera preview
        _video = new Video(_streamW, _streamH);
        _video.attachCamera(_camera);


        //rotate        
        var m : Matrix = new Matrix();
        m.rotate(Math.PI / 2);
        m.translate(_video.height, 0);
        this._video.transform.matrix = m;
        addChild(_video);
    }

    /**
     * takes photo and saves to bitmap
     */
    private function onTakePhoto(event : GestureEvent) : void {     
        var cameraBitmap : BitmapData = new BitmapData(_streamH, _streamW, true, 0x0);
        cameraBitmap.draw(_video, _video.transform.matrix);
        _cameraImage = new Bitmap(cameraBitmap);
    }

    /**
     * finds camera in desired position
     */
    private function getCamera(position : String) : Camera {
        for (var i : uint = 0; i < Camera.names.length; ++i) {
            var cam : Camera = Camera.getCamera(String(i));
            if (cam.position == position) return cam;
        }
        return Camera.getCamera();
    }

, , , , . http://distriqt.com/native-extensions#camera, .

+2

All Articles