更新记录

1.0.5(2023-08-25)

  1. android增加监听系统截屏事件
  2. 增加删除

1.0.4(2023-04-09)

  1. 优化iOS截屏,当变量回收的时候自动回复系统截屏

1.0.3(2023-03-15)

  1. 优化iOS内部视图层次
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


功能

  • 禁止系统屏幕截屏功能
  • 恢复系统屏幕截屏功能
  • 监听系统截屏
  • app内部业务截屏
  • 监听系统录屏
  • 判断当前是否在录屏

API方法

var screenshot = uni.requireNativePlugin("wrs-screenshot");

  • 禁止系统屏幕截屏功能(Android同时禁止录屏)
    1. android里有系统API来禁止屏幕截屏,注意在iOS里退出页面的时候最好恢复系统屏幕截屏
    2. iOS里没有API禁止屏幕截屏,这里采取的方案是当用户系统截屏时,截屏出来的图片是空白的,同时提示用户禁止屏幕截屏

screenshot.disableScreenShot();
  • 恢复系统屏幕截屏功能(Android同时恢复录屏),注意ios在screenshot变量回收的时候会自动恢复系统截屏,一般在页面摧毁的时候回收

screenshot.enableScreenShot();
  • 监听系统截屏

            // 设置系统截屏监听
            screenshot.setCallback((resp) => {
                this.showMsg("监听到截屏:" + JSON.stringify(resp))
                if(this.isAndroid) {
                    // 截屏图片路径
                    let imagePath = resp.imagePath;
                    // Android如果需要删除图片或转为base64,可以使用文件工具类插件(https://ext.dcloud.net.cn/plugin?id=14130)
                } else {
                    // ios保存截屏照片需要几秒,这里开个定时器获取最近一张照片
                    setTimeout(()=>{
                        this.proceIOSImage()
                    },4000); 
                }
            });
  • 获取系统截屏图片 这里获取的是最近一张图片,监听到系统截屏后获取到的最近一张图片基本上就是截屏图片,但是不保证一定是

android: 在监听系统截屏的回调里就有截屏图片的地址let imagePath = resp.imagePath;

ios:


                        // 获取最近一张照片(大部分情况下就是截屏照片)
                        var params = {}
                        // params.filePath = "/xxx/xxx/aa.png" // 传了filePath会把照片保存到这个路径
                        params.needBase64 = true // needBase64会把图片base64返回
                        screenshot.getLatestImage(params, (resp)=>{
                            let base64 = resp.base64
                            if (base64) {
                                base64 = formatBase64Image(base64);
                                this.src = base64;
                            }
                            // 删除相册里的最近一张照片
                            screenshot.deleteLatestImage((deleteResp)=>{
                                var suc = deleteResp.suc
                            })
                        })
  • 取消监听系统截屏

screenshot.removeCallback()
  • app内部业务截屏

var absPath = plus.io.convertLocalFileSystemURL("_downloads");
                // Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
                if (absPath.endWith('/')) {
                    absPath = absPath.substring(0, absPath.length - 1);
                }
                var filePath = absPath + "/" + Date.now() + ".png";

                screenshot.screenShot({
                    "saveImageFilePath": filePath, // 截屏图片保存路径
                    "needBase64Image": true // 是否返回截屏图片的base64字符串
                }, (resp) => {
                    switch (uni.getSystemInfoSync().platform) {
                        case 'android':
                            this.src = absPath;
                            break;
                        case 'ios':
                        // 经测试发现iOS里的image没法直接使用本地文件路径显示图片,这里就采用base64来显示图片
                            var base64Image = resp.base64Image;
                            if (base64Image) {
                                base64Image = formatBase64Image(base64Image);
                                this.src = base64Image;
                            }
                            break;
                        default:
                            break;
                    }
                });
  • 监听系统录屏,开始录屏/结束录屏都会回调,仅支持iOS,Android计划中

                    screenshot.setScreenCapturedCallback((resp)=>{
                        this.showMsg("监听到录屏状态改变了");
                    });
  • 获取系统录屏状态,仅支持iOS,Android计划中

                screenshot.getScreenCaptureState((resp)=>{
                    var isCaptured = resp.isCaptured;
                    if(isCaptured) {
                        this.showMsg("当前正在录屏");
                    } else {
                        this.showMsg("当前没在录屏");
                    }
                });

支持定制,联系方式 QQ:252797991

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问