2016-11-17 5 views
1

В моем приложении для Android я пытаюсь загрузить веб-страницу (которая должна получить доступ к камере) на WebView. На моем ноутбуке, когда я загружаю веб-страницу, я мог получить доступ к камере.Как получить доступ к камере из Webview?

Отображается все остальное на странице html.

Вот разрешение я помещаю в Manifest.xml

<uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.webkit.PermissionRequest" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

Я устанавливающего SDK следующим образом:

<uses-sdk 
     android:minSdkVersion="18" 
     android:targetSdkVersion="21" /> 

Вот мои настройки WebView:

private void setMyWebviewSettings(WebSettings MyWebviewSettings){ 
     MyWebviewSettings.setAllowFileAccessFromFileURLs(true); 
     MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true); 
     MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     MyWebviewSettings.setJavaScriptEnabled(true); 
     MyWebviewSettings.setDomStorageEnabled(true); 
     MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     MyWebviewSettings.setBuiltInZoomControls(true); 
     MyWebviewSettings.setAllowFileAccess(true); 
     MyWebviewSettings.setSupportZoom(true); 
    } 

Если Я мог получить доступ к камере из моего приложения напрямую (используя обычную активность), почему я не могу открыть его из wi тонкий WebView?!

+0

при попытке открыть камеру с WebView, то вам необходимо сделать настройки webview.Please увидеть это http://stackoverflow.com/questions/29290940/open-camera-for-input-type-file-in -webview-не-открытие-андроид – Shailesh

ответ

2

Если я не ошибаюсь, вы просто хотите открыть камеру своего устройства и загрузить недавно захваченную фотографию в веб-просмотр, не открывая другое приложение, тогда вам нужно также разрешить WRITE_EXTERNAL_STORAGE разрешение на обработку файлов и создание новых файлов с камерой и запись это на ваше устройство.

Я надеюсь, что это поможет, я нашел это Open Source (Android Smart WebView) может помочь вам в настройке.

Вам необходимо найти методы openFileChooser() и onShowFileChooser(), чтобы понять, как обрабатывать запросы файлов с веб-входа и активировать камеру телефона для захвата и создания нового изображения без открытия других приложений.

3

Это возможно с getUserMedia через WebRTC.

Настройка WebView, чтобы разрешение и загрузить HTML с loadUrl():

WebView myWebView = (WebView) findViewById(R.id.webview); 

    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.getSettings().setAllowFileAccessFromFileURLs(true); 
    myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); 

    myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.setWebChromeClient(new WebChromeClient() { 
     // Grant permissions for cam 
     @Override 
     public void onPermissionRequest(final PermissionRequest request) { 
      Log.d(TAG, "onPermissionRequest"); 
      MainActivity.this.runOnUiThread(new Runnable() { 
       @TargetApi(Build.VERSION_CODES.M) 
       @Override 
       public void run() { 
        Log.d(TAG, request.getOrigin().toString()); 
        if(request.getOrigin().toString().equals("file:///")) { 
         Log.d(TAG, "GRANTED"); 
         request.grant(request.getResources()); 
        } else { 
         Log.d(TAG, "DENIED"); 
         request.deny(); 
        } 
       } 
      }); 
     } 


    }); 

    myWebView.loadUrl(LOCAL_FILE); 

Затем используйте GetUserMedia через файл JS, предполагая, что у вас есть <video> тег в вашем HTML файле:

var constraints = { video: { width: 800, height: 800 } }; 

navigator.mediaDevices.getUserMedia(constraints) 
.then(function(mediaStream) { 
    var video = document.querySelector('video'); 
    video.srcObject = mediaStream; 
    video.onloadedmetadata = function(e) { 
    video.play(); 
    }; 
}) 
.catch(function(err) { console.log(err.name + ": " + err.message); }); // always check for errors at the end. 

Наконец, убедитесь, что вы имеете права доступа в манифесте:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
0

Я пытался такое же. Ниже код работал со мной.

Сначала в файле манифеста мы должны добавить разрешение аппаратного обеспечения камеры true, используя тег разрешения.

Затем необходимо принять разрешение камеры на использование нижеуказанных строк в вашей деятельности.

webview.setWebChromeClient(new WebChromeClient() { 

    @Override 
    public void onPermissionRequest(final PermissionRequest request) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     request.grant(request.getResources()); 
     } 
    } 

}); 
Смежные вопросы