<span style="font-family: Arial, Helvetica, sans-serif;"> 笔者最近使用Eclipse开发Android移动利用app,其实有1个功能是使用Android系统自带的WebView控件加载Web页面。开发很顺利,阅读也很正常。不过有个比较特殊的1点就是加载的Web页面中有声音或视频。在包括WebView的Activity被Finish以后。声音或视频依然在后台播放,声音也不停止。再1次打开Activity以后,会重复的播放声音或视频。</span>
此问题绝对是不能够容忍的,因而上网搜索,这1搜索不要紧,原来遇到此问题的网友还不止笔者1人。查了1番以后发现,原来此问题应当归属于Android的bug,不太好修改。对包括视频的网页,可以下面的方法解决:
protected void onPause() {
super.onPause();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
webView.onPause(); // 暂停网页中正在播放的视频
}
}
但是此代码对声音是无能为力。在网上搜索了很长时间,解决办法也很多,如:
web.pauseTimers();
web.stopLoading();
web.loadData("<a></a>", "text/html", "utf⑻");
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
mContext.sendBroadcast(i);
web.loadData("about:blank");
以上方法,经过笔者测试,均不好用。
后来经过量次测试,发现1个规律,就是在finish之前,Activity被重新载的页面地址是啥,下次打开以后,还显示甚么页面(由于笔者使用:web.loadData("about:blank");方法测试时,发现下次打开时,显示的是空白页面,开始以为是页面没有加载成功,后来无意中灵机1动,会不会是关闭之前加载的页面,下次打开时还是加载哪一个呢?)。后来测试了1下,关闭之前加载了1下百度页面,发现下次打开时,还真是显示的百度百度页面。那就将错就错,直接重新加载当前页面地址,不就ok了吗。1试,还真可以。声音或视频停止了,下次打开,页面也能够正常加载了。真是得来全不废工夫。
解决办法以下:
@Override
protected void onPause ()
{
m_WebView.reload ();
super.onPause ();
}
m_WebView为Activity中的WebView控件。