【发布时间】:2012-03-24 18:07:33
【问题描述】:
我为 android 制作了一个 flash air 应用程序,我需要下载文件并保存到应用程序本地目录
提前谢谢....
【问题讨论】:
标签: flash air download directory local
我为 android 制作了一个 flash air 应用程序,我需要下载文件并保存到应用程序本地目录
提前谢谢....
【问题讨论】:
标签: flash air download directory local
URLRequest 和 URLLoader 将允许您从 Internet 获取一些数据,FileStream 允许您将其保存在本地(如果您希望他们选择保存位置,则为 FileReference),如
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="windowedapplication1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
{
// TODO Auto-generated method stub
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, complete_handler);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf"));
}
private function complete_handler(event:Event):void
{
var data:ByteArray = event.target.data;
var fr:FileReference = new FileReference();
fr.save(data, 'test.swf');
var fileStream:FileStream = new FileStream();
trace(File.applicationDirectory.nativePath);
fileStream.open(new File(File.applicationDirectory.nativePath+"\\test.swf"),FileMode.WRITE);
fileStream.writeBytes(data, 0, data.length);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:WindowedApplication>
编辑: AS3 移动项目版本:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import flash.net.FileReference;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class DownloadFileMobileAS3 extends Sprite
{
public function DownloadFileMobileAS3()
{
super();
// support autoOrients
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
createLoader();
}
protected function createLoader():void
{
// TODO Auto-generated method stub
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, complete_handler);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf"));
}
private function complete_handler(event:Event):void
{
var data:ByteArray = event.target.data;
var fr:FileReference = new FileReference();
fr.save(data, 'test.swf');
var fileStream:FileStream = new FileStream();
trace("something");
trace(File.applicationDirectory);
trace(File.applicationDirectory.nativePath);
trace(File.applicationStorageDirectory.nativePath);
fileStream.open(new File(File.applicationStorageDirectory.nativePath+"\\test.swf"),FileMode.WRITE);
fileStream.writeBytes(data, 0, data.length);
}
}
}
我在上面的代码中包含了这两个选项,您可能希望取出文件引用部分或取出文件流部分,否则它将被保存两次。
我刚刚添加了移动部分,实际上它确实有某种对话框提示您在 Android 上保存文件,虽然这是我以前从未见过的对话框,只是为您提供保存位置的选项它和音频文件、图像文件和视频文件作为选项或 /mnt/sdcard/test.swf 的默认位置。我让它保存在那里并且能够使用 ES Explorer 看到它(尽管我没有很好的方法来验证数据是否完整,但它通常看起来是正确的)。使用 applicationDirectory 的那个在我身上失败了,追踪它我没有看到 nativePath 所以我将它切换到 applicationStorageDirectory 它有一个值并且它似乎已经保存没有错误,不幸的是它在我的根 /data 文件夹中,因为我没有没有我的手机植根我无法完全确认文件确实存在但没有错误。让我知道您是否尝试过此操作以及您仍然遇到哪些具体问题。
【讨论】: