编写react-native 禁止截图插件

昭容
• 阅读 2060

插件地址

github

npmjs

目的

APP开发中有个这样的需求,需要在注册页禁止手机截图功能。

目前这个功能只能在android上实现,IOS无法禁止系统的截图功能。

通过查阅相关资料,我把查到的结果封装成一个插件,以供大家使用。

代码

封装API,对外暴露两个方法:setFlag,clearFlag。第一个方法在生命周期DidMounted调用,第二个方法在声明周期willUnMount 调用。这样就可以确保当前组件页面禁止系统截图功能。

import { NativeModules, Platform } from 'react-native';
const { RNForbidShot } = NativeModules;
export default {
    setFlag: () => {
        if (Platform.OS === 'android') {
            RNForbidShot.setFlag();
        }
    },
    clearFlag: () => {
        if (Platform.OS === 'android') {
            RNForbidShot.clearFlag();
        }
    },
};

原生代码部分

这里的代码是我查阅的部分,如果有相关需求的同学可以在网上找到相关的代码,我只是把查阅的代码封装成可用的插件。

package com.hanhuizhu.forbidshot;

import android.util.Log;
import android.widget.Toast;
import android.view.WindowManager;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.util.List;

public class RNForbidShotModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;

  public RNForbidShotModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
  }

  @Override
  public String getName() {
    return "RNForbidShot";
  }

  @ReactMethod
  public void setFlag() {
    getCurrentActivity().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        getCurrentActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE); // 禁止截屏
      }
    });
  }

  @ReactMethod
  public void clearFlag() {
    getCurrentActivity().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        getCurrentActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); // 禁止截屏
      }
    });
  }
}

使用

我把上面的代码打包发布了,大家可以直接使用,使用方法如下:

yarn add react-native-forbid-shot && react-native link react-native-forbid-shot

在相关组件中调用

import ForbidShot from 'react-native-forbid-shot';
....
componentDidMounted(){
     ForbidShot. setFlag();
}
....
componentWillUnmount(){
    ForbidShot. clearFlag();
}
....
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
可莉 可莉
4年前
18个常用 webpack插件,总会有适合你的!
!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
4年前
Taro 2.2 全面插件化,支持拓展和定制个性化功能
!(https://oscimg.oschina.net/oscnet/up889c8772b4d4c4a678d00fc4ead5c097c76.png)自2.2开始,Taro引入了插件化机制,允许开发者通过编写插件的方式来为Taro拓展更多功能或者为自身业务定制个性化功能,欢迎大家进行尝试,共同讨论~当前版本2.2.1官
Stella981 Stella981
4年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Stella981 Stella981
4年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2