有公司在我们app上面投广告,发现他们的h5页面音乐不会自动播放。
经过几番折腾,确认以下方案可用。
1.开启js支持
WebSettings setings = mWebView.getSettings();
setings.setJavaScriptEnabled(true);
2.设置WebViewClient
mWebView.setWebViewClient(new CustomWebViewClient());
//CustomWebViewClient为自定义WebViewClient()
private final class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
//url加载失败
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
//做自己的一些处理,比如加载我们自定义的view或者给用户一个提示
}
//页面加载完成的时候调用
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.loadUrl("javascript:startPlay()");
//可以做一些加载完成的处理,比如隐藏正在加载的动画
}
//页面开始加载的时候调用
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//可以做一些加载完成的处理,比如显示正在加载的动画
}
}
重点在onPageFinished这个方法,在确认web加载完成后,去调用h5中的js音乐播放方法。
h5中的startPlay()方法只有一行代码,开启音乐播放。
function startPlay(){
music.play().loop(); //music时音乐播放器对象
}
至于为什么h5在加载完成后,自己去开启音乐播放无法成功,我不是很清楚。但是通过这个回调是可以成功的。
以上。