插件地址
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();
- }
- ....
来源: http://www.jianshu.com/p/8f3ff228fab9