无法访问动态创建的Webview中的相机

时间:2019-03-06 12:17:00

标签: java android webview android-webview

我正在尝试通过Web应用程序访问摄像机。如果我以XML创建WebView,则可以正常工作。但是,如果我尝试动态创建WebView,则不会起作用。空白部分即将到来[图片如下]。 Camera Streams无法更新视图。

这是WebView类文件

public class PageView extends WebView {
public PageView(Context context) {
    super(context);
    init();
}

public PageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

public PageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public void init() { 
    setWebChromeClient(new CustomizedWebChromeClient());
    setWebViewClient(new WebViewClient());


    //File access
    getSettings().setAllowFileAccessFromFileURLs(true);
    getSettings().setAllowFileAccess(true);
    getSettings().setAllowContentAccess(true);
    getSettings().setAllowUniversalAccessFromFileURLs(true);

    //Video playbacks
    getSettings().setMediaPlaybackRequiresUserGesture(false);
    getSettings().setJavaScriptEnabled(true);
    getSettings().setDomStorageEnabled(true);
    getSettings().setAppCacheEnabled(true);

    setupHardwareAcceleration();

    setWebContentsDebuggingEnabled(true);   
}

class CustomizedWebChromeClient extends android.webkit.WebChromeClient
{
    @Override
    public void onPermissionRequest(PermissionRequest request) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            request.grant(request.getResources());
        }
    }
}

@TargetApi(11)
private void setupHardwareAcceleration() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (isHardwareAccelerated()) {
            setLayerType(View.LAYER_TYPE_NONE, null);
        } else {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    }
}}

这是MainActivity类

private WebView webView = null;
private String url = "https://www.onlinemictest.com/webcam-test/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    addWebViewToActivity();
}

public void addWebViewToActivity() {
    LinearLayout ll = (LinearLayout) findViewById(R.id.linearlayout);
    WebView web = new PageView(this);
    web.loadUrl("https://www.onlinemictest.com/webcam-test/");
    ll.addView(web);
}

这是以上代码的结果。 The number represents the number of frames on the screen

注意:在某些测试网络摄像头的网站中,测试结果正常。我的网络摄像头(Android摄像头)的所有详细信息也正常显示。我们甚至可以拍照。但是从摄像机到视图的视频流并没有到来。仅作为空白。另外,空白区域中的数字表示帧数。

1 个答案:

答案 0 :(得分:0)

发现了问题。

我认为该问题是由于动态创建WebView与从XML创建WebView之间存在差异。但是问题的真正原因是,当我们创建自定义的WebView之类的

public CustomizedWebView extends WebView

和Webview的普通对象

Webview webview = new Webview(context);

两者之间的区别是图层类型。对于Web视图,“图层类型”设置为“ LAYER_TYPE_NONE” 。因此,我的屏幕变黑了。