我有项目加载网络浏览和打开摄像头扫描二维码.但有时我从页面返回并再次进入,页面中显示灰色的播放按钮.当我在模拟器中打开它时,它经常在返回时工作,当它工作正常时从日志(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打开打开

screen

如何才能解决这个问题呢?

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)
    }

推荐答案

我解决了问题.这是因为某些设备的摄像头是打开的,但没有关闭.所以我在onDestroyView分钟关闭了摄像机.

@RequiresApi(Build.VERSION_CODES.O)
override fun onDestroyView() {
    binding.webView.evaluateJavascript(
        """
var videoElement = document.querySelector('video');
if (videoElement) {
    videoElement.srcObject.getTracks().forEach(track => track.stop());
}
""",
        null
    )
    binding.webView.clearCache(true)
    binding.webView.clearHistory()
    binding.webView.onPause()
    binding.webView.removeAllViews()
    binding.webView.destroyDrawingCache()
    binding.webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
    super.onStop()
    super.onDestroyView()
}

Android相关问答推荐

StateFlow集合AsState没有更新他的值Jetpack Compose导航

登录方法显示为空列表,即使它显示的是Firebase身份验证控制台

我想使用代码自动重命名我的Android存储中的文件夹

将DiffUtils用于Android上的Recrecerview适配器

如何在使用带有底部导航组件的片段管理器时更改片段工具栏的标签

如何在Jetpack Compose android中使用导航

没有打开历史记录的活动意向 Select 器完成调用活动

有没有什么方法可以让Beeware在安卓手机上显示图片?

当 Firebase Firestore 发生变化时,Kotlin ViewModel 不会更新

在 Jetpack Compose 中对齐行项目

来自位图的 WearOS 图标不显示 colored颜色

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

我该怎么做文本计时器

在 Jetpack Compose 中包装内容

如何在jetpack compose中通过lamda返回columnScope/RowScope

如何放置在柱子的角落(底端)

java.lang.String 类型的值 Forbidden 无法转换为 JSONObject

Jetpack Compose TextField 在输入新字符时不更新

如何使用 ConstraintLayout 链接两个文本

Jetpack 组合和片段