Не удается получить доступ к камере в динамически созданном Webview

#java #android #webview #android-webview

#java #Android #webview #android-webview

Вопрос:

Я пытаюсь получить доступ к камере через веб-приложение. Если я создаю WebView в XML, он работает нормально. Но то же самое не сработает, если я попытаюсь создать 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 Camera) также отображаются в обычном режиме. Мы даже смогли делать фотографии. Но поток с камеры на просмотр не поступает. Только как пустой. Кроме того, число в пустой области представляет количество кадров.

Ответ №1:

Обнаружена проблема.

Я думал, что проблема связана с разницей между созданием WebView динамически и из XML. Но реальная причина проблемы заключается в том, что когда мы создаем настроенный WebView, подобный

 public CustomizedWebView extends WebView
  

и обычный объект Webview, подобный

 Webview webview = new Webview(context);
  

Разница между ними обоими заключается в типе слоя. Тип слоя задан как «LAYER_TYPE_NONE» для webview. Из-за этого я получал пустой экран.