1、先在data里面定义一个定时器
timer:null
2、在onload 或者onshow 里面配置如下代码
onLoad(e) {
//'videoPlayer' 是video标签里配置的id
this.videoContext = uni.createVideoContext('videoPlayer', this);
//防录屏/截屏
let platform = uni.getSystemInfoSync().platform;
console.log(platform,'设备标识')
//安卓手机
if (platform === "android") {
console.log(platform,'设备标识111---')
if (wx.setVisualEffectOnCapture) {
wx.setVisualEffectOnCapture({
visualEffect: 'hidden',
success: (res)=>{
console.log('success录屏',res);
}
})
}
} else {
//苹果手机
this.timer = setInterval(()=>{
wx.getScreenRecordingState({
success: (res)=>{
console.log('success录屏22',res);
if(res.state=='on'){
this.videoContext.pause() //暂停视频播放
uni.showModal({
content:'此页面不允许录屏',
showCancel:false,
success: (res) => {
if(res.confirm){
uni.navigateBack()
}
}
})
}
}
})
},2000)
}
},
3、页面结束要关闭定时器
onUnload(){
if (wx.setVisualEffectOnCapture) {
wx.setVisualEffectOnCapture({
visualEffect: 'none',
success: (res)=>{
console.log('success',res);
}
})
}
if(this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
},
注意:
1、wx.setVisualEffectOnCapture 是适应安卓手机的,实时监听页面录屏的动作,同时也可适配ios16 以上的版本,iOS16一下的不兼容,不生效,所以要用wx.getScreenRecordingState来兼容所有iOS手机,这个方法是监测苹果手机是否开启录屏
2、禁止录屏以后,安卓机是录得黑屏,有的机型虽然录得是黑屏,但可能还有声音,可以试一下
在pages.json这个文件里配置禁止录屏的页面那里配置 visualEffectInBackground:hidden
另外感谢这位大佬的分享,https://juejin.cn/post/7240419809178566714