Разрешение камеры от Webview Android

У меня есть веб-сайт, который сканирует qr. Сайт написан на js. Камера не работает при просмотре этого сайта в Webview. Помогите пожалуйста с этой проблемой.

Вот манифест


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-feature android:name="android.hardware.camera" android:required="true" />
    <uses-feature android:name="android.hardware.camera.front" android:required="true" /> 

Код на java


    public class MainActivity extends AppCompatActivity{
    
    
    
     WebView webView;
     ProgressBar progressBar;
     ExampleCallback exampleCallback;
    
        static class ExampleCallback{
    
            @JavascriptInterface
            public void dataResponse(String res) {
    
    //Put your code to open cameraa
            }
        }
    
    
    
    
        @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
    
            String permission = Manifest.permission.CAMERA;
            int grant = ContextCompat.checkSelfPermission(this, permission);
            if (grant != PackageManager.PERMISSION_GRANTED) {
                String[] permission_list = new String[1];
                permission_list[0] = permission;
                ActivityCompat.requestPermissions(this, permission_list, 1);
            }
    
            webView = (WebView) findViewById(R.id.webView);
            progressBar = (ProgressBar) findViewById(R.id.progressBar);
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.getSettings().setPluginState(WebSettings.PluginState.ON);
            webView.addJavascriptInterface(new WebAppInterface(this), "Android");
    
            webView.setWebChromeClient(new WebChromeClient(){
                @Override
                public void onPermissionRequest(final PermissionRequest request) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        request.grant(request.getResources());
                    }
                }
    
            });
    
            if (isOnline()) {
                webView.loadUrl("//");
    
            webView.setWebViewClient(new WebViewClient() {
    
                    @Override
                    public void onPageStarted(WebView view, String url, Bitmap favicon) {
                        progressBar.setVisibility(View.VISIBLE);
                        super.onPageStarted(view, url, favicon);
                    }
    
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        progressBar.setVisibility(View.GONE);
                        super.onPageFinished(view, url);
    
                    }
    
                    @Override
                    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                        webView.loadUrl("//");
                        super.onReceivedError(view, request, error);
                    }
    
                });
            }else{
                webView.loadUrl("//");
                progressBar.setVisibility(View.GONE);
            }
        }
    
        @SuppressLint("AddJavascriptInterface")
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (requestCode == 1) {
                // perform your action here
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
                    webView.addJavascriptInterface(new WebAppInterface(this), "PLATFORM_ID");
                else {
                    Toast.makeText(MainActivity.this,"Нет разрешения камеры", Toast.LENGTH_SHORT).show();
                }
            }
    
        }
    
        private static class WebAppInterface {
    
            public WebAppInterface(Context context) {
            }
    
            @JavascriptInterface
            public void openCamera(String title) {
                //check permissions and open camera intent;
            }
        }
    
    
    
        @Override
        public void onBackPressed() {
            if (webView.canGoBack()){
                webView.goBack();
            }else {
                super.onBackPressed();
            }
        }
    
        public boolean isOnline() {
            ConnectivityManager cm =
                    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    
            return cm.getActiveNetworkInfo() != null &&
                    cm.getActiveNetworkInfo().isConnectedOrConnecting();
        }
    
    
    }

Это на JS

   function showAndroidToast(res) {

       Android.dataResponse(res);
   }

  

Помогите пожалуйста, в чем ошибка. Приложение открывается, камера спрашивает разрешения. Один раз даже нормально работало. Но потом перестало работать. Камера отображает черный экран.


Ответы (0 шт):