微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有“FLAG_SECURE”的 flutter_pdfview 以防止截取屏幕截图时,Oppo 设备上的黑屏

如何解决使用带有“FLAG_SECURE”的 flutter_pdfview 以防止截取屏幕截图时,Oppo 设备上的黑屏

我使用 FLAG_SECURE 来避免使用 flutter_pdfview 包的屏幕截图。

该软件包适用于几乎所有设备上的 FLAG_SECURE,但在 Oppo 设备上显示黑屏。

我试过了:

这是我在 MainActivity.kt 中的本机代码

package com.online.education.mostafa.elsheikh

import android.os.Bundle
import android.util.Log
import android.view.SurfaceView
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import io.Flutter.embedding.android.FlutterActivity
import io.Flutter.embedding.engine.FlutterEngine
import io.Flutter.plugins.GeneratedpluginRegistrant

class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(@nonnull FlutterEngine: FlutterEngine) {
        GeneratedpluginRegistrant.registerWith(FlutterEngine);
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (!setSecureSurfaceView()) {
            Log.e("MainActivity","Could not secure the MainActivity!")
            // React as appropriate.
        }
    }

    private fun setSecureSurfaceView(): Boolean {
        val content = findViewById(android.R.id.content)
        if (!isNonEmptyContainer(content)) {
            return false
        }
        val splashView = content.getChildAt(0)
        if (!isNonEmptyContainer(splashView)) {
            return false
        }
        val FlutterView = (splashView as ViewGroup).getChildAt(0)
        if (!isNonEmptyContainer(FlutterView)) {
            return false
        }
        val surfaceView = (FlutterView as ViewGroup).getChildAt(0)
        if (surfaceView !is SurfaceView) {
            return false
        }
        surfaceView.setSecure(true)
        this.window.setFlags(
            WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE
        )
        return true
    }

    private fun isNonEmptyContainer(view: View): Boolean {
        if (view !is ViewGroup) {
            return false
        }
        if (view.childCount < 1) {
            return false
        }
        return true
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。