我遇到了几个专门针对ios和Android的解决方案来防止屏幕捕捉和截屏。但是如何禁用本机反应中的屏幕捕捉呢?
发布于 2019-03-05 08:16:46
安卓
内部/android/app/src/main/java/com/{Project_Name}/MainActivity.java
您可以添加以下行。防止setFlag FLAG_SECURE捕获屏幕,使用下面的代码作为示例:
import android.os.Bundle;
import android.view.WindowManager;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}稍后,当您要删除安全标志时
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);iOS
以AppDelegate.m中的覆盖屏幕为例:
- (void)applicationWillResignActive:(UIApplication *)application {
// fill screen with our own colour
UIView *colourView = [[UIView alloc]initWithFrame:self.window.frame];
colourView.backgroundColor = [UIColor whiteColor];
colourView.tag = 1234;
colourView.alpha = 0;
[self.window addSubview:colourView];
[self.window bringSubviewToFront:colourView];
// fade in the view
[UIView animateWithDuration:0.5 animations:^{
colourView.alpha = 1;
}];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// grab a reference to our coloured view
UIView *colourView = [self.window viewWithTag:1234];
// fade away colour view from main view
[UIView animateWithDuration:0.5 animations:^{
colourView.alpha = 0;
} completion:^(BOOL finished) {
// remove when finished fading
[colourView removeFromSuperview];
}];
}发布于 2020-01-13 17:30:33
因此,iOS端构建在上的工作很少。所以,请耐心地阅读下面的方法。
我使用的反应-本机-视频包播放媒体。如果用户启用了屏幕记录,我的要求是显示旋转器。
captured属性设置为YES。我在AppDelegate.m中添加了didFinishLaunchingWithOptions方法下的观察者。
[[UIScreen mainScreen] addObserver:self forKeyPath:@"captured" options:NSKeyValueObservingOptionNew context:nil];capture标志设置为YES时添加桥通知。我创建了两个文件ScreenRecordingNotificy.h和.m
.h
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#ifndef ScreenCaptureNotification_h
#define ScreenCaptureNotification_h
@interface ScreenCaptureNotification : RCTEventEmitter <RCTBridgeModule>
-(void) isScreenCaptureEnabled:(BOOL)isCaptured;
@end
#endif /* ScreenCaptureNotification_h */.m看起来就像
#import <Foundation/Foundation.h>
#import "ScreenCaptureNotification.h"
#import <React/RCTLog.h>
@implementation ScreenCaptureNotification
+ (id)allocWithZone:(NSZone *)zone {
static ScreenCaptureNotification *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [super allocWithZone:zone];
});
return sharedInstance;
}
RCT_EXPORT_MODULE();
- (NSArray<NSString *> *)supportedEvents {
return @[
@"isScreenCaptureEnabled"];
}
-(void) isScreenCaptureEnabled:(BOOL)isCaptured {
[self sendEventWithName:@"isScreenCaptureEnabled" body:@{@"value": @(isCaptured)}];
}
@end#import "ScreenCaptureNotification.h"中导入AppDelegate并添加以下方法。并在[[UIScreen mainScreen] addObserver:self forKeyPath:@"captured" options:NSKeyValueObservingOptionNew context:nil];中添加didFinishLaunchingWithOptions。这就结束了iOS端的更改。
NativeEventEmitter(NativeModules.ScreenCaptureNotification);this.screenCaptureEnabled = bridge.addListener("isScreenCaptureEnabled",res => { this.setState({ screenCapture: true }) }}
和
render() {
if (this.state.screenCapture) {
//Show spinner
return <Spinner />
}
return (
<Vido uri ... />
)
}我愿意接受修改这个职位的建议。如果这篇文章对你有帮助的话,别忘了投票。
发布于 2019-03-05 08:11:53
防止捕获屏幕
安卓
防止setFlag安全捕获屏幕
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);如果您想要删除标志安全
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);https://stackoverflow.com/questions/54998051
复制相似问题