webview设置不弹出权限请求弹窗
Android使用WebView网页中要求获取麦克风权限,原生webView在setWebChromeClient()回调 onPermissionRequest 处理即可,不会弹窗(测试机系统9.0)
后来因为项目需要,更改为使用腾讯X5内核的WebView,权限请求时使用了原生中同样的方法,发现每次进入网页都会弹窗权限请求的弹框
1 @RequiresApi(Build.VERSION_CODES.LOLLIPOP) 2 override fun onPermissionRequest(request: PermissionRequest?) { 3 try { 4 //授权网页获取权限 5 request?.grant(request.resources) 6 request?.resources?.forEach { 7 if (it == "android.webkit.resource.AUDIO_CAPTURE") { 8 RxPermissions(this@WebViewFragment).request(Manifest.permission.RECORD_AUDIO) 9 .subscribe({ isAllow -> 10 if (!isAllow) { 11 ToastUtils.showShort("您拒绝了录音权限无法使用该功能,请在设置中打开") 12 } 13 }, { 14 it.printStackTrace() 15 }) 16 } 17 } 18 } catch (e: Exception) { 19 e.printStackTrace() 20 } 21 }
测试可用的解决办法是这样的(注意了嗷姐妹们!!重点在最后一个回调方法里):
webView.webChromeClientExtension = object : IX5WebChromeClientExtension { override fun getX5WebChromeClientInstance(): Any? { return null } override fun getVideoLoadingProgressView(): View? { return null } override fun onAllMetaDataFinished(p0: IX5WebViewExtension?,p1: HashMap<String, String>?) {} override fun onBackforwardFinished(p0: Int) {} override fun onHitTestResultForPluginFinished(p0: IX5WebViewExtension?,p1: IX5WebViewBase.HitTestResult?,p2: Bundle?) { } override fun onHitTestResultFinished(p0: IX5WebViewExtension?,p1: IX5WebViewBase.HitTestResult?) {} override fun onPromptScaleSaved(p0: IX5WebViewExtension?) { } override fun onPromptNotScalable(p0: IX5WebViewExtension?) {} override fun onAddFavorite(p0: IX5WebViewExtension?,p1: String?,p2: String?,p3: JsResult?): Boolean { return false } override fun onPrepareX5ReadPageDataFinished(p0: IX5WebViewExtension?,p1: HashMap<String, String>?) {} override fun onSavePassword(p0: String?,p1: String?,p2: String?,p3: Boolean,p4: Message?): Boolean { return false } override fun onSavePassword(p0: ValueCallback<String>?,p1: String?,p2: String?,p3: String?,p4: String?,p5: String?,p6: Boolean): Boolean { return false } override fun onX5ReadModeAvailableChecked(p0: HashMap<String, String>?) { } override fun addFlashView(p0: View?, p1: ViewGroup.LayoutParams?) { } override fun h5videoRequestFullScreen(p0: String?) {} override fun h5videoExitFullScreen(p0: String?) { } override fun requestFullScreenFlash() {} override fun exitFullScreenFlash() {} override fun jsRequestFullScreen() {} override fun jsExitFullScreen() {} override fun acquireWakeLock() {} override fun releaseWakeLock() {} override fun getApplicationContex(): Context? { return null } override fun onPageNotResponding(p0: Runnable?): Boolean { return false } override fun onMiscCallBack(p0: String?, p1: Bundle?): Any? { return null } override fun openFileChooser(p0: ValueCallback<Array<Uri>>?, p1: String?, p2: String?) { } override fun onPrintPage() { } override fun onColorModeChanged(p0: Long) {} override fun onPermissionRequest(s: String?,p1: Long,mediaAccessPermissionsCallback: MediaAccessPermissionsCallback?): Boolean { mediaAccessPermissionsCallback?.invoke(s,MediaAccessPermissionsCallback.ALLOW_AUDIO_CAPTURE,true) return true } }
以上,就OKK了,有什么出入的话,姐妹萌对比官方文档参考一下
补充:有bug遇到X5默认开启失败,还有一个原因可能是app本身未开启录音权限,需要本身有权限的前提下才能请求到网页中的权限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-07-21 解决华为手机图片选择无效及产生的open failed: EACCES (Permission denied)错误
2016-07-21 Android 静默安装/后台安装