#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. Из-за этого я получал пустой экран.