コンテンツを携帯電話にダウンロードする前に、もう一手順踏まなければなりません。電話機でアクティブな GPRS 接続を確立することが必要です。一般的に言えば、SWF ファイルがその時点で接続されていない場合、ユーザーは OS レベルのメニューからアクセスポイントを選択する必要があるということになります。このメニューは、接続が確立されていない場合に表示されます (図 3)。このプロセスでは、Flash の他のどのバージョンにおいてより、ユーザーのネットワークステータスについて詳細な情報を得ることができます
図 3: データをロードする関数を呼び出すと、アクセスポイントを選択するようプロンプトが表示されます。
各携帯電話機は異なる性能を持つため、ネットワーク接続にあたっては電話機のネットワーク接続能力を確認する必要があります。新しい _capLoadData プロパティを使用して、これを行うことができます。このプロパティの値が 1 の場合、その電話機はネットワークに接続しています。そうでない場合は、いかに上手にプログラムの品質を下げるかについて検討し、インターネットに接続できないということに対処する必要があります。残念ながら、現在インターネットに接続できません、というメッセージがユーザーに表示することが一般的です。
また、fscommand2 getNetworkRequestStatus() を使った最後のリクエストについてのより詳細な情報は、どの時点においても得ることができます。返されたステータスは、-1 から 10 のいずれかで、各値が異なるネットワーク状態、つまり結果を表しています。ステータスコードと簡単なシンタックスの完全なリストについては、Flash Lite CDK から PDF 形式で入手可能な『Flash Lite 1.1 Authoring Guidelines』 のページ 41 と 42 をご覧ください。
コネクション型アプリケーションを構築する場合には、次の接続上の問題を頭に入れておきます。
アイドル接続はタイムアウトする。
SWF ファイルがインターネットとの通信を行っていない場合、数秒後にインターネットへの接続はシャットダウンされます。接続がタイムアウトした後にもう一度再接続する必要がある場合、ユーザーはアクセスポイントを再度選択することが必要です。
同時接続の数を制限する。
同じフレームで複数の接続を開こうとする場合、最初の接続だけが行われます。また、一度にあまりに多数の接続を行うと (フレームごとに 1 つの接続であっても)、電話機の接続確立の能力を超えることになります。
他にも多数のデータプランがある。
GPRS データアクセスは非常に高くつく場合があります。送信するデータの最適化に最大の努力を払い、必要な場合だけ接続するようにします。高帯域幅のアプリケーションを作成しているのであれば、このアプリケーションでは相当量のデータを送信する可能性があることをユーザーに知らせるポイントを 1 つ以上設けることを検討します。
上述の接続プロセスは、インターネットからリモートデータにアクセスしようとする場合、それが変数であろうとムービーデータであろうと常に自動的に起こります。リモートテキストにアクセスするには、ロードされたデータを指定するタイムラインと任意のレベルのどちらに格納するのかによって、loadVariables または loadVariablesNum のいずれかを使用します。Flash IDE のドキュメントでこれらのコマンドのシンタックスについての説明を読むか、Flash Lite CDK に提供されている例を参照してください。
サーバー上のテキストが loadVariables によって読み取られるためには、URLエンコード される必要があります。URL エンコーディングはデータを順番に並べるための方法で、キーと値は等号で分けられ、各キー / 値ペアはアンパサンド記号 (&) によって分けられます。また、いくつかの特殊文字は後ろに 2 キャラクタコードが続くパーセント記号に変換されます。これは、非常に一般的なエンコーディングの形式で、大量の情報を渡す非常に長い URL によく見られます。(詳細については、 テクニカルノート 14143: URL エンコーディング : テキストファイルからの特殊文字の読み込み* を参照してください。)
以下は、http://justin.everett-church.com/mobile/variables.txt の内容です。このファイルには、4 つの変数とそのエスケープされた値が含まれています。
"name=Justin+Everett-Church"site=http%3A%2F%2Fjustin%2Eeverett%2Dchurch%2Ecom"company=Yahoo%21"done=1
FLA ファイルで、ルートタイムラインのフレーム 1 に次のコードを追加します。
loadVariables(http://justin.everett-church.com/mobile/variables.txt, "/")
ご自分でこれを試される場合は、ロードされた変数を示すためのテキストフィールドもルートに表示されることを確認してください。加えて、必ず携帯電話でこれをテストし、ロードプロセスの状態を確認するようにしてください。
データがロードされたことを確認するには、他に 2 つの方法があります。 fscommand2 を使って、getNetworkRequestStatus() をチェックしてステータスを確認するか、あるいは、変数ストリームの終わりに変数を含め、その変数のための適切なタイムラインを確認します。この方法は、他の方法より格段に簡単であると思います。たとえば、変数 done=1 または eof=1 を使用します。こうすることで、変数の値を確認して、「1」に等しい場合はデータがロードされたことがわかります。そうでない場合、ステータスをチェックし、ファイル検出で何の問題もなかったかを確認します。
サーバーからロードされている変数の 1 つを見るには、Flash Lite CDK で [Connection Detection] をチェックします。
外部 SWF ファイルをロードするプロセスは、変数のロードの場合とほとんど同じです。SWF ファイルをロードするためのコマンドは loadMovie と loadMovieNum で、ここでもタイムラインにロードするか (前者) レベルにロードするか (後者) で使い分けされます。SWF ファイルをロードするための唯一の要件は、Flash Lite、Flash 4、あるいはこれら以前のファイルとしてフォーマットすることです。
ロードしようとするファイルがこれらより新しい SWF ファイルであるか、あるいは完全に不適切なファイルタイプの場合、デスクトップの場合のように Flash がこれに対して無反応で処理することはありません。無効なデータをロードしようとすると、ユーザーには OS レベルのポップアップアラートが報告されます。Flash IDE を使って loadMovie のために記述されたいくつかの機能は、Flash Player と Flash Lite Player のより最近のバージョンのためのものです。たとえば、JPEG ファイルは Flash Lite を使って直接ロードすることはできません。JPEG ファイルをロードしようとすると、無効なコンテンツの警告を受け取ることになります (図 4 を参照)。
図 4: Flash Player 7 のために書き出された SWF ファイルをロードしようとすると、タイプ 3 エラーを受け取ります。
電話機でこのエラーを見るには、FLA ファイルのルートタイムラインに次のコード行を追加します。
loadMovieNum("http://justin.everett-church.com/mobile/invalid.swf", 1)
デスクトップコンピュータの場合にはコンテンツが正しくロードされることに留意してください。電話機からファイルをロードしようとする場合にのみロードは失敗します。
ロードが完了したとき loadMovie コマンドのターゲットが常にステージ上にあるようにしてください。特定のフレーム上にのみ存在するムービークリップに SWF ファイルをロードし、サーバーが応答した場合、ターゲットムービーが存在しないとエラーが起こります。このエラーを回避するためには、ターゲットが常にステージ上にあるようにしますが、_visible プロパティを使うことで必要に応じて見えないようにできます。
SWF ファイルが Flash Lite にロードされたことを確認するには、いつでもネットワークリクエストステータスを使用できます。しかし、私の場合、既存のプロパティの _framesloaded と _totatframes を使用しています。2 つの値が等しいとき、ファイルはロードされています。
SWF ファイルの Flash Lite への ダイナミックなロードを実行してみるには、私の『NYC Traffic』から取り出した次のサンプルコードを見てください。ルートタイムラインのフレーム 1 のコードにこのコードを置くだけです。
loadMovieNum("http://gizmo.everett.org/cam/flashimg.php?image=/cctv26.jpg&cacheBust=" + random(100000), 1)
このコードは、適切にフォーマットされているものであればどの SWF ファイルのためにも正常に実行されますが、この場合、URL はタイムズスクエアの現時点でのイメージを取得する PHP ページを指しています。Flash に関する限り、サーバー上の静止的な SWF ファイルと動的に生成された SWF ファイルでは何の違いもありません。私は、URL の最後にキャッシュを無効にするランダムナンバーを追加しました。こうすることで、イメージを呼び出す度に、URL が少しだけ異なることになります。呼び出される度 SWF ファイルのポイントは異なっているはずなので、このようにしています。
これで、SWF ファイル生成作業は、すべて完了しました。このアプリケーションのために、Stefan Schüßler's 氏の FlashWriter Toolkit の修正版を使用しています。オリジナルバージョンは彼のサイト Bronson Beta* から入手できます。この PHP ファイルは、SWF ファイルで JPEG ファイルをラップしますが、イメージを回転させたり、そのサイズを変更したりすることはありません。このアプリケーションの完全バージョンで、変更はレイアウトに適用されます。