webview在版本5 kitkat和冰淇淋之前在android上显示白色屏幕并且卡在上面

时间:2016-02-22 10:24:07

标签: android webview screen

我开发了一个使用Android Studio的简单应用程序,使用HLS link进行直播。该应用程序在version 5及更高版本上正常运行,但报告中的大多数版本仅具有白屏。使用模拟器,它可以与API 21,22和23一起使用,但是15,16和17显示白屏。以下是我的活动代码。

MainActivity.java

import android.app.Activity;
    import android.app.Activity;
    import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.FrameLayout;

    import com.example.webview.R;

public class MainActivity extends Activity {
private WebView webView;
private FrameLayout customViewContainer;
private WebChromeClient.CustomViewCallback customViewCallback;
private View mCustomView;
private myWebChromeClient mWebChromeClient;
private myWebViewClient mWebViewClient;

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
    webView = (WebView) findViewById(R.id.webView);
    mWebViewClient = new myWebViewClient();
    webView.setWebViewClient(mWebViewClient);
    mWebChromeClient = new myWebChromeClient();
    webView.setWebChromeClient(mWebChromeClient);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setSaveFormData(true);
    webView.loadUrl("http://xx.xx.xx.xx/live/xx/playlist.m3u8");
}

public boolean inCustomView() {
    return (mCustomView != null);
}

public void hideCustomView() {
    mWebChromeClient.onHideCustomView();
}

@Override
protected void onPause() {
    super.onPause();    //To change body of overridden methods use File | Settings | File Templates.
    webView.onPause();
}

@Override
protected void onResume() {
    super.onResume();    //To change body of overridden methods use File | Settings | File Templates.
    webView.onResume();
}

@Override
protected void onStop() {
    super.onStop();    //To change body of overridden methods use File | Settings | File Templates.
    if (inCustomView()) {
        hideCustomView();
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        if (inCustomView()) {
            hideCustomView();
            return true;
        }

        if ((mCustomView == null) && webView.canGoBack()) {
            webView.goBack();
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

class myWebChromeClient extends WebChromeClient {
    private Bitmap mDefaultVideoPoster;
    private View mVideoProgressView;

    @Override
    public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
        onShowCustomView(view, callback);    //To change body of overridden methods use File | Settings | File Templates.
    }

    @Override
    public void onShowCustomView(View view,CustomViewCallback callback) {

        // if a view already exists then immediately terminate the new one
        if (mCustomView != null) {
            callback.onCustomViewHidden();
            return;
        }
        mCustomView = view;
        webView.setVisibility(View.GONE);
        customViewContainer.setVisibility(View.VISIBLE);
        customViewContainer.addView(view);
        customViewCallback = callback;
    }

    @Override
    public View getVideoLoadingProgressView() {

        if (mVideoProgressView == null) {
            LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
            mVideoProgressView = inflater.inflate(R.layout.video_progress, null);
        }
        return mVideoProgressView;
    }

    @Override
    public void onHideCustomView() {
        super.onHideCustomView();    //To change body of overridden methods use File | Settings | File Templates.
        if (mCustomView == null)
            return;

        webView.setVisibility(View.VISIBLE);
        customViewContainer.setVisibility(View.GONE);

        // Hide the custom view.
        mCustomView.setVisibility(View.GONE);

        // Remove the custom view from its container.
        customViewContainer.removeView(mCustomView);
        customViewCallback.onCustomViewHidden();

        mCustomView = null;
    }
}

class myWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return super.shouldOverrideUrlLoading(view, url);    //To change body of overridden methods use File | Settings | File Templates.

    }
}

我做错了什么?

0 个答案:

没有答案