【问题标题】:as3 android saving downloaded files from serveras3 android保存从服务器下载的文件
【发布时间】:2012-08-14 12:14:27
【问题描述】:

以下代码在桌面上运行时有效,但在安卓设备上无效。我认为这与下面的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);

【问题讨论】:

  • 您是否尝试过使用正斜杠而不是双反斜杠?反斜杠作为文件夹分隔符仅在 Windows 上使用。

标签: android actionscript-3 flash air


【解决方案1】:

它适用于 Android 版 Air。是的,您以后可以使用它做更多事情,但这是基本的开始。

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);

我一直在努力……找到这个。我希望它可以帮助很多人。为什么这不是更普遍的知识?有时无法找到动作脚本中的某些内容。

我对此有一个问题。如何将代码直接下载到设备上的某个位置,而无需用户选择位置。非常感谢!

【讨论】:

    【解决方案2】:

    您肯定需要将“\”改为“/”,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, 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 2017-10-18
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多