Android webview与h5交互问题总结

1.autoplay无法自动播放音乐

解决方法:

mWebview.getSettings().setMediaPlaybackRequiresUserGesture(false);

原因:在android 4.2添加了允许用户手势触发音视频播放接口,该接口默认为 true ,即默认不允许自动播放音视频,只能是用户交互的方式由用户自己促发播放。

2.视频播放全屏问题

解决方法:为webview设置WebChromeClient并实现下面的方法

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        super.onShowCustomView(view, callback);
        showCustomView(view);
    }

    @Override
    public void onHideCustomView() {
        super.onHideCustomView();
        hideCustomView();
    }

显示和隐藏方法具体实现如下:

    @Override
    protected void showCustomView(View view) {
        if (mVideoFrame != null) {
            mVideoFrame.removeAllViews();
            mVideoFrame.setVisibility(View.VISIBLE);
            mVideoFrame.addView(view);
        }
    }

    @Override
    protected void hideCustomView() {
        if (mVideoFrame != null) {
            mVideoFrame.setVisibility(View.GONE);
            mVideoFrame.removeAllViews();
        }
    }

mVideoFrame控件布局如下:

    <FrameLayout
        android:id="@+id/fullscreenFrame"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:elevation="10dp"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </FrameLayout>

3.加载 Https 页面时导致的问题

通常情况下,通过WebView的loadUrl(String url)方法,可以顺利加载页面。但是,当load通过SSL加密的HTTPS页面时,如果这个页面的安全证书无法得到认证,WebView就会显示成空白页。

解决方式: 通过重写WebViewClient的onReceivedSslError方法来接受所有网站的证书,忽略SSL错误。

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
        super.onReceivedSslError(view, handler, error);
    }

4.Https 页面图片资源显示失败

在Android 5.0之后,WebView默认不允许Https + Http的混合使用方式,所以当Url是Https的,图片资源是Http时,导致页面加载失败。需要设置 MixedContentMode属性允许Https+Http混用。

    WebSettings wetSettings = webView.getSettings();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
         wetSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }
# Android 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×