提交 c7bdfe11 编写于 作者: lizhongyi_'s avatar lizhongyi_

补充uni-usercapturescreen插件interface.uts

上级 5f97b8a7
type GetBatteryInfoResult = { type GetBatteryInfoResult = {
/** /**
* 错误码 * 错误码
* 0:成功
* 1001:getAppContext is null
* 1002:navigator.getBattery is unsupported
*/ */
errCode: number, errCode : number,
/** /**
* 调用API的名称 * 调用API的名称
*/ */
errSubject: string, errSubject : string,
/** /**
* 错误的详细信息 * 错误的详细信息
*/ */
errMsg: string, errMsg : string,
/** /**
* 设备电量,范围1 - 100 * 设备电量,范围1 - 100
*/ */
level: number, level : number,
/** /**
* 是否正在充电中 * 是否正在充电中
*/ */
isCharging: boolean isCharging : boolean
} }
interface UniError<T> { interface UniError<T> {
/** /**
* 错误码 * 错误码
*/ */
errCode:T, errCode : number,
/** /**
* 调用API的名称 * 调用API的名称
*/ */
errSubject:string, errSubject : string,
/** /**
* 错误的详细信息 * 错误的详细信息
*/ */
errMsg:string, errMsg : string,
/** /**
* 错误来源 * 错误来源
*/ */
cause:any cause : any
} }
/**
* 错误码
*/
type GetBatteryInfoErrorCode =
/** 成功 */
0
/** getAppContext is null */
| 1001
/** navigator.getBattery is unsupported */
| 1002
;
export type GetBatteryInfoOptions = { export type GetBatteryInfoOptions = {
/** /**
* 接口调用结束的回调函数(调用成功、失败都会执行) * 接口调用结束的回调函数(调用成功、失败都会执行)
*/ */
success?: (res: GetBatteryInfoResult) => void success ?: (res : GetBatteryInfoResult) => void
/** /**
* 接口调用失败的回调函数 * 接口调用失败的回调函数
*/ */
fail?: (res: UniError<GetBatteryInfoErrorCode>) => void fail ?: (res : UniError) => void
/** /**
* 接口调用成功的回调 * 接口调用成功的回调
*/ */
complete?: (res: object) => void complete ?: (res : object) => void
} }
/** /**
...@@ -80,5 +72,5 @@ export type GetBatteryInfoOptions = { ...@@ -80,5 +72,5 @@ export type GetBatteryInfoOptions = {
* @assert () => success({errCode: 0, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:ok", level: 60, isCharging: false }) * @assert () => success({errCode: 0, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:ok", level: 60, isCharging: false })
* @assert () => fail({errCode: 1001, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:fail getAppContext is null" }) * @assert () => fail({errCode: 1001, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:fail getAppContext is null" })
*/ */
export default function getBatteryInfo(options: GetBatteryInfoOptions): void export default function getBatteryInfo(options : GetBatteryInfoOptions) : void
import { NotificationCenter } from 'Foundation'; import { NotificationCenter } from 'Foundation';
import { UIApplication, UIView, UITextField, UIScreen, UIDevice } from "UIKit" import { UIApplication, UIView, UITextField, UIScreen, UIDevice } from "UIKit"
import { UTSiOS } from "DCloudUTSFoundation" import { UTSiOS, UTSCallback } from "DCloudUTSFoundation"
import { DispatchQueue } from 'Dispatch'; import { DispatchQueue } from 'Dispatch';
import { SetUserCaptureScreenOption, UserCaptureScreenResult, OnUserCaptureScreen, OffUserCaptureScreen, SetUserCaptureScreen } from "../interface.uts"
/**
* 设置防截屏options
*/
type SetUserCaptureScreenOption = {
open: boolean;
success?: (res: UTSJSONObject) => void;
fail?: (res: UTSJSONObject) => void;
complete?: (res: UTSJSONObject) => void;
}
/** /**
* 定义监听截屏事件工具类 * 定义监听截屏事件工具类
*/ */
class CaptureScreenTool { class CaptureScreenTool {
static listener?: UTSCallback; static listener ?: UTSCallback;
static secureView?: UIView; static secureView ?: UIView;
// 监听截屏 // 监听截屏
static listenCaptureScreen(callback?: UTSCallback) { static listenCaptureScreen(callback ?: UTSCallback) {
this.listener = callback this.listener = callback
// 注册监听截屏事件及回调方法 // 注册监听截屏事件及回调方法
...@@ -41,13 +29,13 @@ class CaptureScreenTool { ...@@ -41,13 +29,13 @@ class CaptureScreenTool {
} }
// 移除监听事件 // 移除监听事件
static removeListen(callback?: UTSCallback) { static removeListen(callback ?: UTSCallback) {
this.listener = null this.listener = null
NotificationCenter.default.removeObserver(this) NotificationCenter.default.removeObserver(this)
callback?.({}) callback?.({})
} }
static createSecureView(): UIView | null { static createSecureView() : UIView | null {
let field = UITextField() let field = UITextField()
field.isSecureTextEntry = true field.isSecureTextEntry = true
if (field.subviews.count > 0 && UIDevice.current.systemVersion != '15.1') { if (field.subviews.count > 0 && UIDevice.current.systemVersion != '15.1') {
...@@ -64,9 +52,9 @@ class CaptureScreenTool { ...@@ -64,9 +52,9 @@ class CaptureScreenTool {
} }
// 开启防截屏 // 开启防截屏
static onAntiScreenshot(option: SetUserCaptureScreenOption) { static onAntiScreenshot(option : SetUserCaptureScreenOption) {
// uts方法默认会在子线程中执行,涉及 UI 操作必须在主线程中运行,通过 DispatchQueue.main.async 方法可将代码在主线程中运行 // uts方法默认会在子线程中执行,涉及 UI 操作必须在主线程中运行,通过 DispatchQueue.main.async 方法可将代码在主线程中运行
DispatchQueue.main.async(execute = (): void => { DispatchQueue.main.async(execute = () : void => {
let secureView = this.createSecureView() let secureView = this.createSecureView()
let window = UTSiOS.getKeyWindow() let window = UTSiOS.getKeyWindow()
let rootView = window.rootViewController == null ? null : window.rootViewController!.view let rootView = window.rootViewController == null ? null : window.rootViewController!.view
...@@ -82,19 +70,18 @@ class CaptureScreenTool { ...@@ -82,19 +70,18 @@ class CaptureScreenTool {
rootView!.frame = rect rootView!.frame = rect
} }
} }
let res = { let res = new UserCaptureScreenResult()
errSubject: "uts-screenshot-listener", res.errCode = 0;
errCode: 0, res.errSubject = "uni-usercapturescreen";
errMsg: "setUserCaptureScreen:ok", res.errMsg = "setUserCaptureScreen:ok";
}
option.success?.(res) option.success?.(res)
option.complete?.(res) option.complete?.(res)
}) })
} }
// 关闭防截屏 // 关闭防截屏
static offAntiScreenshot(option: SetUserCaptureScreenOption) { static offAntiScreenshot(option : SetUserCaptureScreenOption) {
DispatchQueue.main.async(execute = (): void => { DispatchQueue.main.async(execute = () : void => {
if (this.secureView != null) { if (this.secureView != null) {
let window = UTSiOS.getKeyWindow() let window = UTSiOS.getKeyWindow()
let rootView = window.rootViewController == null ? null : window.rootViewController!.view let rootView = window.rootViewController == null ? null : window.rootViewController!.view
...@@ -107,59 +94,55 @@ class CaptureScreenTool { ...@@ -107,59 +94,55 @@ class CaptureScreenTool {
} }
this.secureView = null this.secureView = null
} }
let res = new UserCaptureScreenResult()
let res = { res.errCode = 0;
errSubject: "uts-screenshot-listener", res.errSubject = "uni-usercapturescreen";
errCode: 0, res.errMsg = "setUserCaptureScreen:ok";
errMsg: "setUserCaptureScreen:ok",
}
option.success?.(res) option.success?.(res)
option.complete?.(res) option.complete?.(res)
}) })
} }
} }
/** /**
* 开启截图监听 * 开启截图监听
*/ */
export function onUserCaptureScreen(callback?: UTSCallback) { export const onUserCaptureScreen : OnUserCaptureScreen = function (callback ?: UTSCallback) {
CaptureScreenTool.listenCaptureScreen(callback) CaptureScreenTool.listenCaptureScreen(callback)
} }
/** /**
* 关闭截屏监听 * 关闭截屏监听
*/ */
export function offUserCaptureScreen(callback?: UTSCallback) { export const offUserCaptureScreen : OffUserCaptureScreen = function (callback ?: UTSCallback) {
CaptureScreenTool.removeListen(callback) CaptureScreenTool.removeListen(callback)
} }
/** /**
* 开启/关闭防截屏 * 开启/关闭防截屏
*/ */
export function setUserCaptureScreen(option: SetUserCaptureScreenOption) { export const setUserCaptureScreen : SetUserCaptureScreen = function (options : SetUserCaptureScreenOption) {
if (UIDevice.current.systemVersion < "13.0") { if (UIDevice.current.systemVersion < "13.0") {
let res = { let res = new UserCaptureScreenResult()
errSubject: "uts-screenshot-listener", res.errCode = 12001;
errCode: 12001, res.errSubject = "uni-usercapturescreen";
errMsg: "setUserCaptureScreen:system not support" res.errMsg = "setUserCaptureScreen:system not support";
} options.fail?.(res);
option.fail?.(res); options.complete?.(res);
option.complete?.(res);
} else if (UIDevice.current.systemVersion == "15.1") { } else if (UIDevice.current.systemVersion == "15.1") {
let res = { let res = new UserCaptureScreenResult()
errSubject: "uts-screenshot-listener", res.errCode = 12010;
errCode: 12010, res.errSubject = "uni-usercapturescreen";
errMsg: "setUserCaptureScreen:system internal error" res.errMsg = "setUserCaptureScreen:system internal error";
} options.fail?.(res);
option.fail?.(res); options.complete?.(res);
option.complete?.(res);
} else { } else {
if (option.open == true) { if (options.open == true) {
CaptureScreenTool.onAntiScreenshot(option) CaptureScreenTool.onAntiScreenshot(options)
} else { } else {
CaptureScreenTool.offAntiScreenshot(option) CaptureScreenTool.offAntiScreenshot(options)
} }
} }
} }
export type UserCaptureScreenResult = {
/**
* 错误码
* 0:成功
* 12001:system not support
* 12010:system internal error
*/
errCode : number,
/**
* 调用API的名称
*/
errSubject : string,
/**
* 错误的详细信息
*/
errMsg : string,
}
export type SetUserCaptureScreenOption = {
/**
* true: 开启防截屏 false: 关闭防截屏
*/
open : boolean;
/**
* 接口调用成功的回调函数
*/
success ?: (res : UserCaptureScreenResult) => void,
/**
* 接口调用失败的回调函数
*/
fail ?: (res : UserCaptureScreenResult) => void,
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
complete ?: (res : UserCaptureScreenResult) => void
}
/**
* 开启截屏监听
*
* @param {UTSCallback} callback
* @tutorial https://uniapp.dcloud.net.cn/api/system/capture-screen.html#onusercapturescreen
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
* @since 3.6.8
*/
export type OnUserCaptureScreen = (callback ?: UTSCallback) => void
/**
* 关闭截屏监听
*
* @param {UTSCallback} callback
* @tutorial https://uniapp.dcloud.net.cn/api/system/capture-screen.html#offusercapturescreen
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
* @since 3.6.8
*/
export type OffUserCaptureScreen = (callback ?: UTSCallback) => void
/**
* 设置防截屏
*
* @param {SetUserCaptureScreenOption} options
* @tutorial https://uniapp.dcloud.net.cn/api/system/capture-screen.html#setusercapturescreen
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
* @since 3.7.3
*/
export type SetUserCaptureScreen = (options : SetUserCaptureScreenOption) => void
interface uni {
onUserCaptureScreen : OnUserCaptureScreen,
offUserCaptureScreen : OffUserCaptureScreen,
setUserCaptureScreen : SetUserCaptureScreen
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册