Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用AIR在android手机上删除媒体文件_Android_Actionscript 3_Air - Fatal编程技术网

Can';t使用AIR在android手机上删除媒体文件

Can';t使用AIR在android手机上删除媒体文件,android,actionscript-3,air,Android,Actionscript 3,Air,[检查下半年的最后一次编辑,了解主要问题的更新] 我的手机将图片存储在SD卡上。我使用CameraUI拍照,然后我想分析并删除它 代码(简化): 我希望SD卡上的图片被删除,但是它仍然在那里,并且在它旁边创建了一个新的虚拟文件。 我跟踪了文件的URL,得到了storage/sdcard0/DCIM/Camera/IMG\u 20131016\u 204700.jpg 我的android清单包括 <uses-permission android:name="android.permissio

[检查下半年的最后一次编辑,了解主要问题的更新]

我的手机将图片存储在SD卡上。我使用
CameraUI
拍照,然后我想分析并删除它

代码(简化):

我希望SD卡上的图片被删除,但是它仍然在那里,并且在它旁边创建了一个新的虚拟文件。 我跟踪了文件的URL,得到了
storage/sdcard0/DCIM/Camera/IMG\u 20131016\u 204700.jpg

我的android清单包括

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

问题是
deleteFile
不起作用,它会留下一个同名的空文件(0b)。我已经了解到这是一个缓存问题,我找到的唯一解决办法是针对本机代码。

是的,Android上的媒体文件通常存在缓存问题。您必须找到一种方法来启动安装的Intent.ACTION\u MEDIA\u或其他方法来刷新设备的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();
    }
private var\u视频:视频;
私有变量\u cameraImage:位图;
私人摄像机:摄像机;
/**
*初始化照相机
*/
私有函数initCamera():void{
//拿照相机
_camera=getCamera(CameraPosition.FRONT);
_设置模式(_streamW,_streamH,streamFPS,true);
_摄像机。设置质量(0,100);
_camPosition=CameraPosition.FRONT;
//相机预览
_视频=新视频(_streamW,_streamH);
_视频。附加摄像头(_摄像头);
//轮换
var m:矩阵=新矩阵();
m、 旋转(Math.PI/2);
m、 翻译(_video.height,0);
这个。_video.transform.matrix=m;
addChild(_视频);
}
/**
*拍摄照片并保存到位图
*/
私有函数onTakePhoto(事件:GestureEvent):void{
var cameraBitmap:BitmapData=新的BitmapData(_streamH,_streamW,true,0x0);
cameraBitmap.draw(_video,_video.transform.matrix);
_cameraImage=新位图(cameraBitmap);
}
/**
*在所需位置查找相机
*/
私有函数getCamera(位置:字符串):Camera{
对于(变量i:uint=0;i

如果您直接在应用程序中拍照,您将失去本机照片应用程序的许多功能,但在操作和保存图像时将拥有完全控制权,还可以为您的应用程序提供特定的自定义界面。您也可以尝试这个本机扩展,让您直接在应用程序中使用相机的一些更高级功能

你做这件事时有没有出错?我假设如果您试图删除的文件不在沙盒文件夹的正下方,那么在adobe air端这是一个沙盒冲突。即使有清单权限,它也可能不起作用。不,根本没有错误。有没有办法修改沙盒文件夹?哦,我发现了一些问题并编辑了我的问题。你正在收听删除文件的完整事件吗?通常,在on capture handler中,您可以获取所捕获文件的文件引用(例如,data as MediaPromise).file,并通过对文件本身调用deleteFile()来删除该文件。这正是我的代码所做的。使用Camera类是我考虑过的选择,但我讨厌它,因为我希望屏幕方向保持自动。请纠正我,但您的
m.rotate(Math.PI/2)
仅在纵向模式下工作,视频预览将旋转。我对本机扩展不是很熟悉,如果你能给我一个简单的方法来实现你所说的,我可能会验证你的答案。在我的例子中,旋转是将相机预览旋转到横向模式。因此,您可能可以通过收听旋转事件,然后更改相机分辨率的设置,并在横向模式下旋转视频预览,来实现自动旋转。但我知道你更喜欢CameraUI解决方案。创建本机扩展(尤其是设置环境和构建)需要一些工作,但您有一个优势,即只需要一个平台。这是一个非常好的平台。为了记录我对Camera类的厌恶,它禁用了自动对焦。您必须时不时地重新创建对象,以便调整焦距(并且它会关闭/重新打开快门,这可能对相机不太好)。
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's delete the copy
            trace("delete", pic.modificationDate.time, pic.size, pic.name);
            pic.deleteFile();
        }
    }
}
    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();
    }