WebViewを使用してアクティビティ内のFlashコンテンツを表示することを試みています。すべてがうまく機能していますが、ユーザーがホームキーを押してアクティビティをバックグラウンドに置くと、Flashコンテンツが実行され続けます(サウンドが再生され続けるなど)。
標準のAndroidブラウザとDolphinブラウザの両方がこの問題を回避しているように見え、ブラウジングアクティビティがバックグラウンドに置かれたときにFlashコンテンツを適切に一時停止していることに気付きました。
理想的には、アクティビティが終了している場合はWebViewを完全に強制終了し、それ以外の場合は一時停止するソリューションが必要です(基本的にブラウザーのデフォルトの動作をコピーします)
これが私がまとめた簡単なテストで、バックグラウンドミュージックがあるKongregateにゲームをロードします。
public class BrowserTest extends Activity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile");
setContentView(mWebView);
}
@Override
protected void onPause(){
super.onPause();
mWebView.pauseTimers();
if(isFinishing()){
mWebView.loadUrl("about:blank");
setContentView(new FrameLayout(this));
}
}
@Override
protected void onResume(){
super.onResume();
mWebView.resumeTimers();
}
}
ストックブラウザの最新のソースを調べたところ、似たようなことをしているようです(pauseTimers / resumeTimersを呼び出しています)が、私が見ているコードは古くなっているのではないかと心配しています。もう存在しないようです。
カウンターを更新する単純なJavaScriptsetIntervalを使用してテストすることにより、pauseTimersの呼び出しが機能していることを確認しました。ウィンドウまたはビューの管理に関して、他に明らかなことはありますか?
モバイルFlashプレーヤーのドキュメントには次のように書かれています。
Flash Playerは、CPU使用率、バッテリー使用量、メモリ使用量を削減するために、表示されていないSWF再生またはフォアグラウンドアプリケーションを自動的に一時停止します。
これは、ストックブラウザとドルフィンブラウザの両方で完全に機能しているようですが、私のアプリでは機能していません。任意のアイデア/ソリューションをいただければ幸いです。
更新:これを機能させるためにアクティビティに追加した関数は次のとおりです。アクティビティのonPause関数では「onPause」、アクティビティのonResume関数では「onResume」と呼びます。
private void callHiddenWebViewMethod(String name){
if( mWebView != null ){
try {
Method method = WebView.class.getMethod(name);
method.invoke(mWebView);
} catch (NoSuchMethodException e) {
Log.error("No such method: " + name, e);
} catch (IllegalAccessException e) {
Log.error("Illegal Access: " + name, e);
} catch (InvocationTargetException e) {
Log.error("Invocation Target Exception: " + name, e);
}
}
}