0

私は、いくつかのリモート SWF ファイル (すべて私が作成および制御) をロードするプロトタイプの Air for Android アプリケーションに取り組んでおり、変数をリモート SWF に渡すことができる必要があります。

以下は、プロセスが現在どのように機能しているかの簡単な内訳です​​。

  • Loader と呼ばれる Android アプリがデバイスにインストールされます。
  • Loader は私のサーバーを指し、メイン ステージにロードする Player.swf を見つけます。Player.swf はログイン画面を表示します。
  • ユーザーが正しくログインすると、Player.swf は、ユーザーに表示するリモート SWF ビデオのリストを含む XML 応答を API から受け取ります。Player.swf は XML リストをループし、各リモート SWF を順番に再生します。

さて、これまでのところ、とても良いです。リモート SWF ビデオが読み込まれ、完全に再生されます。ただし、Player.swf (XML 応答から取得) から変数を取得して、リモート SWF で使用する必要があります (テキスト文字列、ユーザー ID など)。

私が行ったすべての検索から、Loader はコンパイルされたアプリケーションであり、Player.swf + リモート SWF はすべてサーバーから取得されているため、Sandbox 環境が原因であると考えています。ただし、Player.swf は XML 応答を処理するための AS3 コードを持ち、再生されるリモート SWF と同じサーバー上にあるため (したがって、同じサンドボックスである必要がありますか? )

URL パラメーターを使用して変数を渡すことはできましたが、これはローカルでのみ機能し、Android アプリケーションを使用する場合には機能しません。

サンドボックス ブリッジに関する古いブログ ポットを見つけましたが、サンプル ファイルのダウンロードが機能しなくなりました。

parentSandboxBridge 関数/クラスを使用して変数を渡す際に、誰かが私を正しい方向に向けることができますか (私が見たすべての例は、関数の受け渡しを扱っているか、Flex 用にコーディングされています)

達成したいことを示すものは何もないので、コードを投稿することはできません (私はこのビットに完全に困惑しています!)

編集:パラメータを渡すことができました(以前はローカルで機能していましたが、ローダーアプリ>リモートプレーヤー>リモートSWFアニメーションコンボでは機能しませんでした)

Player.swf 内にアプリケーション ドメイン コンテキストを設定する必要がありました (リモートの swf アニメーションと同じサーバー上にあるため、なぜこれを行う必要があるのか​​わかりません)。

しかし奇妙なことに、親またはルートを使用して変数を取得することはできませんか?

4

1 に答える 1

0

Android 2.2.2 を実行している HTC Desire でこれをテストしましたが、コメントに記載したとおりに動作するため、答えは次のとおりです:)

あなたのホストは同様に定義する必要があります:

        var params:URLVariables = new URLVariables();
            params["string"] = "ala ma kota";
            params["number"] = 1979;

        var request:URLRequest = new URLRequest();
            request.data = params;
            request.url = "urlVarsReader.swf";

        var loader:Loader = new Loader();

        loader.load(request);

        addChild(loader);

ロードされたコンテンツ (ここでは urlVarsReader.swf) は、次のようにそれらを読み取ることができます。

        var output:TextField = new TextField();
        addChild(output);
        output.border = true;
        output.width = 320;
        output.height = 240;
        output.wordWrap = true;
        output.multiline = true;
        var p:Object = getParams(this.loaderInfo);
        for (var name:String in p) 
        {
            output.appendText(name + " = " + p[name] + "\n");
        }

パラメータを読み取るためのラッパーメソッドがあります:

    public function getParams(li:LoaderInfo):Object
    {
        try
        {
            var params:Object = li.parameters;
            var pairs:Object = {};
            var key:String;
            for(key in params)
            {
                pairs[key] = String(params[key]);
            }
        }
        catch(e:Error)
        {
            return {error:e.getStackTrace()};
        }
        return pairs;
    }

よろしくお願いします

編集:

これは、SecurytyError で失敗するローカル コンテンツでのみ機能します loadwithparams.swf

于 2012-11-29T12:24:13.190 に答える