当我的活动不可见时,如何在Android WebView中暂停Flash内容?
我正在尝试使用WebView在我的活动中显示Flash内容。 一切工作都很好,但是当用户点击home键将活动放到后台时,Flash内容会继续运行(声音继续播放等)
我注意到,Android浏览器和Dolphin浏览器似乎都避免了这个问题,并且当浏览活动放到后台时,可以正确地暂停Flash内容。
理想情况下,我想要一个解决scheme,完全杀死WebView,如果活动结束,但暂停,否则(基本上复制浏览器的默认行为)
这里有一个简单的testing,我把它放在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),尽pipe我担心我一直在看的代码已经过时了,因为它调用的函数不是似乎再也不存在了。
我确实通过testing一个简单的JavaScript setInterval来更新一个计数器来调用pauseTimers。 还有什么其他的显而易见的,我应该试图在窗口或视图pipe理?
手机Flash播放器的文档说:
Flash Player也将自动暂停SWF回放,例如当收到呼叫或闹铃响起时,它不在视图或前台应用程序中,以减lessCPU使用率,电池使用情况和内存使用情况。
这似乎是在股票浏览器和海豚浏览器,但在我的应用程序完美的工作。 任何想法/解决scheme将不胜感激!
更新:这是我们最终添加到我们的活动,以使其工作的function。 我们用活动的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); } } }
我没有看到你在哪里看到BrowserActivity
或任何东西正在调用pauseTimers()
。 我确实看到了BrowserActivity
onPause()
最终路由到WebView
onPause()
。 但是, WebView
onPause()
具有@hide
注释,因此不属于SDK的一部分。 closures袖口,它看起来像onPause()是你想要的,给出的评论:
调用此方法可暂停与此视图及其关联的DOM /插件/ javascript /等相关的任何额外处理。 例如,如果视图脱离屏幕,则可以调用此视图以减less不必要的CPU和/或networkingstream量。 当视图再次“激活”时,调用onResume()。
请注意对pauseTimers()
文档中未提及的“插件”的引用。
我会尝试使用reflection来查看onPause()
(以及稍后的onResume()
,当你想要再次启动的东西)是否做你需要的。 如果是这样,请将问题发布到b.android.com ,要求他们将这些方法(或等价物)添加到SDK中。 您的需求似乎是一个常见的解决scheme,而通过SDK的解决scheme并不是一个好的解决scheme。
@Override protected void onPause() { super.onPause(); this.callHiddenWebViewMethod("onPause"); } @Override protected void onResume() { super.onResume(); this.callHiddenWebViewMethod("onResume"); }
这就是你如何在你的活动中称之为…就像一个魅力。
- .apk首次安装时如何启动服务
- com.android.build.transform.api.TransformException
- Android添加一个子菜单到menuItem,addSubMenu()在哪里?
- PendingIntent为第一个通知正确地工作,但其余的不正确
- 如何在MY服务器上validationAndroid应用内结算交易?
- 创build选项卡布局时会提示setOnTabSelectedListener已被弃用
- 向ListView最后一个元素添加底部边距
- Android中是否有波斯(Shamsi或Jalali)日历的库或algorithm?
- FragmentPagerAdapter getItem没有被触发