我有项目加载网络浏览和打开摄像头扫描二维码.但有时我从页面返回并再次进入,页面中显示灰色的播放按钮.当我在模拟器中打开它时,它经常在返回时工作,当它工作正常时从日志(log)中获得它,Logcat有这样的行:
W/m.mirosmagazam:与所有者的长期监视器争执 视频捕获摄像机2_摄像机线程(6680)为空 Android.hardware.camera2.impl.CameraDeviceImpl.close()(CameraDeviceImpl.java:1433) 服务员=0为空 Android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onCaptureStarted(android.hardware.camera2.impl.CaptureResultExtras, Long)237ms D/FA:连接到远程服务V/FA:正在处理 排队服务任务:1 D/EGL_EMULATION:APP_TIME_STATS: 平均值=24.30毫秒,最小=3.44毫秒,最大值=390.79毫秒,计数=29 D/EGL_EMULATION: EglCreateContext:0x723d53444e10:MAJ 2 MIN 0 RCV 2D D/EGL_EMULATION: App_time_stats:平均值=467.91毫秒,最小=2.15毫秒,最大值=1398.04毫秒,计数=3 D/EGL仿真:APP_TIME_STATS:平均值=62.40毫秒最小值=12.81毫秒最大值=794.05毫秒 计数=17 V/fA:不活动,断开与服务的连接 D/EGL仿真:APP_TIME_STATS:平均值=912.88毫秒最小=5.76毫秒最大=6756.47毫秒 Count=8 E/WebView-Logger:未捕获到新的 状态,已在转换中:2:未捕获的无法转换为 新状态,已在转换E/WebView-Logger:未捕获 无法转换到已在转换中的新状态:2: 未捕获的不能转换到新状态,已经在转换中 D/EGL_EMULATION:eglCreateContext:0x723d530d1550:Maj 2 min 0 RCV 2 E/cr_VideoCapture:CameraDevice.StateCallback打开打开
如何才能解决这个问题呢?
override fun onCreateFinished() {
binding.webView.settings.javaScriptEnabled = true
binding.webView.settings.domStorageEnabled = true
binding.webView.settings.mediaPlaybackRequiresUserGesture = false
binding.webView.settings.allowFileAccessFromFileURLs = true
binding.webView.settings.allowUniversalAccessFromFileURLs = true
binding.webView.settings.allowContentAccess = false
binding.webView.settings.useWideViewPort = true
binding.webView.settings.loadWithOverviewMode = true
binding.webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
binding.webView.loadUrl("https://izlenebilirlik.migros.com.tr/urun_izle_ms.aspx")
if (ContextCompat.checkSelfPermission(requireContext(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ErrorDialog(
ErrorType.CUSTOM_MESSAGE,
::onClickWarningMessage,
getString(R.string.you_must_allow_camera_permission_to_read_qr)
).show(
childFragmentManager,
ErrorDialog.TAG
)
} else {
binding.webView.loadUrl("https://izlenebilirlik.migros.com.tr/urun_izle_ms.aspx")
}
binding.webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: android.webkit.PermissionRequest?) {
if (request?.resources?.contains("android.permission.CAMERA") == true || request?.resources?.contains("android.webkit.resource.VIDEO_CAPTURE") == true) {
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted, so request it
ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.CAMERA), 100)
} else {
request.grant(request.resources)
}
} else {
super.onPermissionRequest(request)
}
}
override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
Log.e ("WebView - Logger", consoleMessage?.message () + " : " + consoleMessage?.lineNumber () + " : " + consoleMessage?.message ());
return true
}
}
}
private fun onClickWarningMessage() {
ActivityCompat.requestPermissions(requireActivity(), arrayOf(android.Manifest.permission.CAMERA), 100)
}