[检查下半部分的最后编辑以获取有关主要问题的更新]
我的手机将照片存储在 SD 卡上。我用CameraUI
拍照,然后我想分析并删除它。
代码(简化):
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();
}
我希望 SD 卡上的图片会被删除,但它仍然存在,并且在它旁边创建了一个新的虚拟文件。我跟踪了文件的 URL 并得到了storage/sdcard0/DCIM/Camera/IMG_20131016_204700.jpg
我的 android 清单包括
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
编辑:
如本文所示,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's delete the copy
trace("delete", pic.modificationDate.time, pic.size, pic.name);
pic.deleteFile();
}
}
}
问题是它deleteFile
不起作用,它会留下一个同名的空文件(0b)。我已经阅读了它的缓存问题,我发现的唯一解决方法是针对本机代码。