3

以下のコードは、as3 Air For Android を使用してサーバーから携帯電話に mp3 をダウンロードします。これらのファイルを後でアプリで使用したいので、次の質問があります。

ユーザーが場所を選択するためのボックスを開くのではなく、ファイルが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);

開始、停止、および進行時にこの進行状況を監視することもできますが、eventListener がそれで機能する可能性があると思います。

4

2 に答える 2

7

次のコードは、リモート URL から mp3 をダウンロードし、.007という名前のフォルダーを作成します(名前を変更したり、多くのフォルダーを追加したり、フォルダーをまったく追加したりできません)。次に、その場所に保存します。

import flash.filesystem.*;
/// Change the line below to point to your mp3 online
var urlString:String = "http://YourWebsite.com/YourSound.mp3";
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);

function loaded(event:Event):void
{
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
    writeAirFile();
}

function writeAirFile():void
{ 
    // Change the folder path to whatever you want plus name your mp3
    // If the folder or folders does not exist it will create it.
    var file:File = File.userDirectory.resolvePath(".007/Yahoo.mp3");
    var fileStream:FileStream = new FileStream();
    fileStream.open(file, FileMode.WRITE);
    fileStream.writeBytes(fileData, 0, fileData.length);
    fileStream.close();
    trace("The file is written.");
}

PSアプリでAndroidを使用して正しい権限を付与することを忘れないでください

于 2012-08-20T17:06:46.277 に答える
1

ダウンロード方法などについての答えをあちこち探していました...

私が個人的に好むのは、Greenshocks AS3 ライブラリから LoaderMax を使用して任意のファイルをダウンロードすることです (これは非常に軽量なローダーであるため、ほとんどのプロジェクトに既に含まれています。


ローカルの URL を指定する代わりに、リモートの URL を指定します。いくつかのコードを示します。

public function downloadTxtJpgMp3():void
{
    var queue:LoaderMax = new LoaderMax();
    emptyLoader();    //this emptys the loader from previous attempts to load any files

    queue.append( new DataLoader("http://www.70disco.com/lyrics/delegation_you_and_I.txt",{name:"test_txt" ,format:"text", estimatedBytes:4000})  );
    queue.append( new ImageLoader( "http://4.bp.blogspot.com/-WQ3uAvGdPS0/UOB_OPS6rcI/AAAAAAAAKkU/HYaXXHVHTqc/s1600/whatever-dude-whatever.jpg" , {name:"test_img" , estimatedBytes:77000, container:this, alpha:0, scaleMode:"proportionalInside"}) );
    queue.append( new MP3Loader( "http://nocturno.nsk.pt/otherpages/funny/mp3/2001-02/Cebola%20Mol/Cebola%20Mol%20-%20Satright%20No%20Chaser%20II.mp3" , {name:"test_mp3" , repeat:0, autoPlay: false}) );  

    queue.addEventListener(LoaderEvent.COMPLETE, onDownloadComplete);
    queue.load();
}

以下は COMPLETE イベントのハンドラーです。ERROR、FAIL、PROGRESS などのハンドラを指定することもできます。

protected function onDownloadComplete(event:LoaderEvent):void
{
    var objects:Array = event.currentTarget.content ;

    var firstObjectILoaded: String      //txt
    var secondObjectILoaded:Bitmap      //jpg
    var thirdObjectILoaded: Sound       //mp3

    // ContentDisplay is found within greenshock

    firstObjectILoaded = objects[0];
    secondObjectILoaded = ((objects[1] as ContentDisplay).rawContent as Bitmap)
    thirdObjectILoaded = objects[2];

    trace(firstObjectILoaded);
    thirdObjectILoaded.play();
}   

LoaderMax は、ファイルがローカルかリモートかを実際には気にせず、メモリにロードするだけであることを思い出してください。


その時点から、ファイルとして保存するか、単に使用して破棄するかを決定できます。

ファイルとして保存する場合は、次の方法があります: (以下の iOS の例)

var str:String = File.applicationDirectory.nativePath;

//in iOs you can save on 4 different folder directories (according to apples rules)
// cache, temp, app support, and user documents (i don't cover this below)

appCache = new File(str +"/\.\./Library/Caches");       //cache folder (in which you put files that you dont care being erased. the iOs might delete those files in case of low memory
appTempData = new File(str +"/\.\./tmp");               //temp folder (just files you temporarily want to store
appData = new File(str +"/\.\./Library/Application\ Support");      //any file your application NEEDS in order to operate, this can't be deleted by the os


var fr:FileStream = new FileStream();

fr.open(
    appTempData     //  appTempData or appCache or appData or userDocs
    .resolvePath("myCache.txt"),FileMode.WRITE); 
fr.writeUTFBytes("works");
fr.close(); 

于 2013-01-10T09:43:19.613 に答える