如何解决使用带有“FLAG_SECURE”的 flutter_pdfview 以防止截取屏幕截图时,Oppo 设备上的黑屏
我使用 FLAG_SECURE
来避免使用 flutter_pdfview 包的屏幕截图。
该软件包适用于几乎所有设备上的 FLAG_SECURE
,但在 Oppo 设备上显示黑屏。
我试过了:
- 使用原生 Android 代码设置
FLAG_SECURE
- 使用 flutter_windowmanager 包
这是我在 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 举报,一经查实,本站将立刻删除。