Developer's Blog

Android で Flash を使う

 

こんにちは。開発担当の福井です。

Android でアプリを作るとき、ちょっとした更新などはアプリのアップデート無しに行いたいのでコンテンツを WebView で表示する、なんてあるあるですよね。スマートフォン界隈では html5 化が進んではおりますが、web でリッチコンテンツといえばまだまだ Flash が健在です。Android では Flash が使えますので、web 側の実装に Flash を使うなんてことは珍しいことではありません。「Android だから Flash が動く!」なんて安易に採用しがちですが、Flash を利用するうえでよくある落とし穴をいくつかご紹介します。WebView を使う際のヒントにしていただければ幸いです。

 

Flash が表示されない

 

驚くなかれ、ただ WebView で Flash を含んだ web ページを読み込んでも Flash コンテンツは表示されません。WebView の以下のコードでプラグインの設定を変更することで表示できるようになります。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { webView.getSettings().setPluginState(WebSettings.PluginState.ON); } else { webView.getSettings().setPluginsEnabled(true); } 

Froyo から利用できる PluginState では plugin を自動でロードするかどうかを設定することができます。自動でロードさせたくない場合は WebSettings.PluginState.ON_DEMAND を設定しましょう。そうすると、コンテンツ部分にはプレースホルダーが表示され、タップすることで plugin がロードされるようになります。

ICS で Flash が再生されない

 

Flash のプラグインでは HoneyComb から利用可能になった、ハードウェアアクセラレータを使用しているようで、明示的に ON にしないと動作しません。Application、Acrivity、View の任意のレベルで設定できるのでセットしてください。セットするだけで対応できますが、ビルドする SDK を変更しないといけないので注意が必要です。

ICS で動画が再生されない

 

html5 の video タグでも同様なのですが、Flash のムービープレイヤーで動画を再生する際 ICS から WebView の仕様が変わって、プレイヤー画面を自分で用意する必要があります。WebChromeClient の onShowCustomView をオーバーライドして動画プレイヤーを描画する view を返してあげてください。終了時には onHideCustomView が呼ばれますので、利用した view の後片付けもお忘れなく。

スリープ状態になっても Flash が動いている

 

これは Flash に限った問題では無いのですが、端末がスリープ状態に入っても WebView は自動で停止しません。スリープに入る前に WebView の onPause() / onResume() メソッドを呼ぶことで動作を停止/再開することで対処しましょう。これらの API は HoneyComb から追加になったものですが、隠し API として昔から存在していますので、それより古いバージョンでも安心して利用できます。

Activity の orientation が変わる

 

これには驚きました。Flash でムービープレイヤーなどを表示すると、コンテンツが横画面に最適化されるのですが、なんと Activity の orientation も変更されるようです。向きを固定にしていても発生するようですので、予期せぬパターンで横画面に固定されて画面の表示が戻らなくなるパターンがあります。Flash から戻ってきたタイミングなどを利用して縦画面に戻してやりましょう。

おわりに

どうしても標準のブラウザと同じ動作が実現しない!という時はこちらのリポジトリを見てみることをオススメします。Android の標準ブラウザのソースコードなのですが、ブラウザでできることを網羅することができますので、いざというときに役に立ちます。

Android の WebView は addJavaScriptInterface もあることから JavaScript とも強力に連携できるためついつい採用してしまいますが、意外と落とし穴が多いです。特に複数バージョン間でのサポートに難がありますので、テストは入念に。Android 2.1 の IS03 だと、独自に Flash lite が載ってたりしますが、それはまた別のおはなし。なお、Sleipnir Mobile for Android の開発担当は西田です。私ではありませんのであしからず。

 

フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!

 

Copyright © 2019 Fenrir Inc. All rights reserved.