繁体   English   中英

无法访问动态创建的Webview中的Camera

[英]Unable to access Camera in dynamically created Webview

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

这是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);
}

这是以上代码的结果。 数字代表屏幕上的帧数

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

找到了问题。

我认为问题出在动态创建WebView与从XML创建WebView之间。 但是问题的真正原因是,当我们创建一个自定义的WebView

public CustomizedWebView extends WebView

和Webview的普通对象

Webview webview = new Webview(context);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM