WebView - как обработать запрос разрешения камеры? - PullRequest
0 голосов
/ 01 сентября 2018

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

так что с помощью пользовательской вкладки Chrome это позаботится обо мне, и сам Chrome запросит у пользователя разрешение на использование камеры точно так же, как в Интернете.

Теперь моя проблема в том, что я хочу справиться с падением, если Chrome не установлен.

поэтому я сделал запасной веб-просмотр. проблема в том, что я не знаю, как предоставить пользователю разрешение, когда дело доходит до класса webviewClient () (НЕ класс WebChromeClient ())

если мы проверим WebChromeClient, то увидим, что у него есть метод для переопределения для обработки запроса: onPermissionRequest (...)

но я ничего не вижу для webviewclient. вот что у меня есть:

class CustomFallBackWebViewActivity CustomTabsHelper.CustomTabFallback {


    override fun openUri(context: Context?, uri: Uri?) {
        val i = Intent(context, CustomFallBackWebViewActivity::class.java)
        i.putExtra(WebViewActivity.EXTRA_URL, uri.toString())
        context?.startActivity(i)
    }

    @Inject
    lateinit var permissionManager: PermissionManager

    override fun onCreate(savedInstanceState: Bundle?) {
        (applicationContext as MyApplication).appComponent.inject(this)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_fallback_webview)

        val url = intent.extras?.getString(WebViewActivity.EXTRA_URL)
        url?.let { showWebView(url) }

    }

    override fun showWebView(url: String) {
        webView.webChromeClient = FallBackWebChromeClient()
        webView.webViewClient = WebViewClient() //WHAT SHOULD I OVERRIDE HERE TO perform the permission handling incase chrome is not stalled i assume this is used
        webView.loadUrl(url)
        webView.settings.javaScriptEnabled = true
    }

    //i assume the below class gets called only if chrome is installed , right ?
    inner class FallBackWebChromeClient : WebChromeClient() {

    //this is NEVER called when using webViewClient()...
        override fun onPermissionRequest(request: PermissionRequest?) {
            //super.onPermissionRequest(request)
            permissionManager.requestCameraPermission(this@CustomFallBackWebViewActivity) //show the permission screen myself (is there any other way ?)
        }

        override fun onPermissionRequestCanceled(request: PermissionRequest?) {
            super.onPermissionRequestCanceled(request)
        }
    }
}

если это вообще имеет значение, вот как я его использую:

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
            .addDefaultShareMenuItem()
            .setToolbarColor(this.getResources().getColor(R.color.white))
            .enableUrlBarHiding()
            .setShowTitle(true)
            .build();

    // This is optional but recommended, pre-warming info
    CustomTabsHelper.addKeepAliveExtra(getActivity(), customTabsIntent.intent);

    CustomTabsHelper.openCustomTab(getActivity(), customTabsIntent,
            Uri.parse(url),
            new CustomFallBackWebViewActivity());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...