更新记录
1.0.5(2023-08-25)
- android增加监听系统截屏事件
- 增加删除
1.0.4(2023-04-09)
- 优化iOS截屏,当变量回收的时候自动回复系统截屏
1.0.3(2023-03-15)
- 优化iOS内部视图层次
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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同时禁止录屏)
- android里有系统API来禁止屏幕截屏,注意在iOS里退出页面的时候最好恢复系统屏幕截屏
- 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