以下代码在桌面上运行但在Android设备上没有。我认为它与下面的FileStream
有关。
有关如何将其保存到Android设备的任何想法吗?
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.events.Event;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, complete_handler);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest("http://massmediamail.com/mp3s/Why%20a%20Protestant%20Pastor%20Beacame%20Catholic.mp3"));
//any file type;
function complete_handler(event:Event):void
{
var data:ByteArray = event.target.data;
var fr:FileReference = new FileReference();
trace(File.applicationDirectory.nativePath);
fr.save(data, 'Catholic.mp3');
var fileStream:FileStream = new FileStream();
trace(File.applicationDirectory.nativePath);
fileStream.open(new File (File.applicationStorageDirectory.nativePath+"\\Catholic.mp3"),FileMode.WRITE);
fileStream.writeBytes(data, 0, data.length);
}
这是错误:
Error #2044: Unhandled IOErrorEvent:. text=Error #2038: File I/O Error.
at Untitled_fla::MainTimeline/complete_handler()[Untitled_fla.MainTimeline::frame1:25]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
这就是它引用的界限:
fileStream.open(new File (File.applicationStorageDirectory.nativePath+"\\Catholic.mp3"),FileMode.WRITE);
答案 0 :(得分:1)
适用于Air for Android。是的,你可以在以后做更多的事情,但这是基本的开始。
import flash.net.FileReference;
/// It can be an mp3,jpg, png, etc... just change the url
/// and the extension name. nice huh?
var yourFileLocation = "http://YourWeb.com/YourSong.mp3";
var yourFileName = "YourSong.mp3";
var daFile:FileReference = new FileReference();
daFile.download(new URLRequest(yourFileLocation), yourFileName);
我永远工作......找到这个。我希望它能帮到很多人。为什么这不是更常见的知识?行动脚本中的某些事情有时候无法找到。
我对此有一个问题。如何将代码直接下载到设备上的某个位置,而不是用户必须选择位置。非常感谢!
答案 1 :(得分:0)
你肯定需要在“\”上改为“/”,Android是一个基于linux的系统。实际上你应该使用File.separator属性而不是字符串,这将使你的代码保持跨平台。
一般来说,你应该能够使用它:
File.applicationStorageDirectory.resolvePath( "Catholic.mp3" );
您是否已授予应用程序写入文件系统的权限?
要执行此操作,您需要将以下内容(尤其是“WRITE_EXTERNAL_STORAGE”行)添加到应用程序描述符中。
<android>
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
]]></manifestAdditions>
</android>
此外,您应该侦听这些错误以获取更多信息,并在代码中处理它们:
fileStream.addEventListener( IOErrorEvent.IO_ERROR, fileStream_errorHandler,