【发布时间】:2023-03-18 09:47:02
【问题描述】:
[检查下半部分的最后一次编辑以获取有关主要问题的更新]
我的手机将照片存储在 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 manifest 包括
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
编辑:
正如在this article 上看到的,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)。我已经阅读了它的缓存问题,我发现的唯一解决方法是针对本机代码。
【问题讨论】:
-
做的时候有没有报错?如果您尝试删除的文件不直接位于沙盒文件夹下,我假设这是 adobe air 方面的沙盒违规。即使有清单权限,它也可能不起作用。
-
不,完全没有错误。有没有办法修改沙盒文件夹?哦,我想出了一些东西并编辑了我的问题。
-
您是否正在收听完整事件以删除文件?通常在捕获处理程序中,您可以获得被捕获文件的文件引用(e.data as MediaPromise).file 并通过在文件本身上调用 deleteFile() 来删除该文件。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
-
这正是我的代码所做的。
标签: android actionscript-3 air