flutter禁止截屏、读屏

文章介绍了如何在Flutter应用中禁止截屏功能,分别针对Android和iOS平台提供了代码实现。在Android端,通过在MainActivity.java中添加FLAG_SECURE标志来实现。而在iOS端,由于没有内置方法,需要监听窗口状态并在改变时显示白屏。虽然Android的录屏禁止效果在部分机型上不理想,但iOS的实现效果良好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单凭flutter现有的内置方法是无法完美的实现禁止功能,只能在android和ios两端分别处理

android端,更改MainActivity.java:

import android.os.Bundle;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterFragmentActivity {
    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ///禁止截屏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
        ///设置进入后台后,多任务列表为空白页
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
    }
}

ios端,更改AppDelegate.swift,因ios无内置直接调用屏蔽的方法,只能监听窗口的状态,当改变是替换为白屏窗口

import UIKit
import Flutter
import flutter_downloader

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
      window = UIWindow.init(frame: UIScreen.main.bounds)
      window.backgroundColor = .white
      let vc = FViewController()
      window.rootViewController = vc
    GeneratedPluginRegistrant.register(with: self)
    FlutterDownloaderPlugin.setPluginRegistrantCallback(registerPlugins)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

private func registerPlugins(registry: FlutterPluginRegistry) {
    if (!registry.hasPlugin("FlutterDownloaderPlugin")) {
       FlutterDownloaderPlugin.register(with: registry.registrar(forPlugin: "FlutterDownloaderPlugin")!)
    }
}
class FViewController: FlutterViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let v = view
        v?.backgroundColor = .white
        v?.frame = .zero
        view = makeSecureView()
        view.addSubview(v!)
    }
    ///防截图view
    private func makeSecureView() -> UIView?{
        let tf = UITextField()
        tf.isSecureTextEntry = true
        let fv = tf.subviews.first
        fv?.subviews.forEach{$0.removeFromSuperview()}
        fv?.isUserInteractionEnabled = true
        return fv
    }
}

截屏效果还可以,满足当前需求,android禁止录屏效果不理想,部分机型不兼容,ios效果良好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值