1# 锁屏管理服务 2 3## 简介 4### 内容介绍 5锁屏管理服务是OpenHarmony中系统服务,为锁屏应用提供注册亮屏、灭屏、开启屏幕、结束休眠、退出动画、请求解锁结果监听,并提供回调结果给锁屏应用。锁屏管理服务向三方应用提供请求解锁、查询锁屏状态、查询是否设置锁屏密码的能力。 6 7**图 1** 架构图 8 9 10 11### 框架图介绍 121.三方应用支持操作请求解锁、查询锁屏状态、查询是否设置锁屏密码接口调用。\ 132.锁屏应用注册亮屏、灭屏、开启屏幕、结束休眠、退出动画、请求解锁结果监听等事件 \ 143.框架层API用来处理三方应用和锁屏应用的js接口请求处理,NAPI层进行js调用的处理 \ 154.框架层IDL用来处理NAPI接口向锁屏管理服务之间的桥梁,进行IPC通讯 \ 165.锁屏管理服务用来处理三方应用和锁屏应用接口请求,并作出对应处理,提供相应的返回结果。 17 18## 目录 19 20``` 21/base/theme/screenlock_mgr 22├── figures # 构架图 23├── frameworks/kitsimpl # 对应用提供的接口 24├── interfaces/kits # 组件对外提供的接口代码 25│ ├── jskits # 服务间接口 26│ └── napi # js接口解析成napi接口 27├── sa_profile # 组件包含的系统服务的配置文件和进程的配置文件 28├── services # 锁屏管理服务实现 29├── test # 接口的单元测试 30└── utils # 组件包含日志打印和有序公共事件定义的常量 31``` 32 33## 说明 34 35### 接口说明 36 37**表 1** 锁屏管理服务的主要方法说明 38 39| 接口名 | 描述 | 40| -------------------------- | -------------------------- | 41| isScreenLocked(callback: AsyncCallback<boolean>): void; | 判断屏幕是否锁屏,callback方式 | 42| isScreenLocked(): Promise<boolean>; | 判断屏幕是否锁屏,Promise方式 | 43| isLocked(): boolean; | 判断屏幕是否锁屏。如果屏幕当前已锁定,则返回true,否则返回false,同步方式 | 44| isSecureMode(callback: AsyncCallback<boolean>): void; | 判断当前设备的屏幕锁定是否安全(安全屏幕锁定意味着解锁屏幕需要密码、图案或其他用户身份识别),callback方式 | 45| isSecureMode(): Promise<boolean>; | 判断当前设备的屏幕锁定是否安全(安全屏幕锁定意味着解锁屏幕需要密码、图案或其他用户身份识别),Promise方式 | 46| isSecure(): boolean; | 判断当前设备的屏幕锁定是否安全(安全屏幕锁定意味着解锁屏幕需要密码、图案或其他用户身份识别)。如果当前设备的屏幕锁定安全,则返回true,否则返回false,同步方式 | 47| unlockScreen(callback: AsyncCallback<void>): void; | 三方应用解锁屏幕,callback方式 | 48| unlockScreen(): Promise<void>; | 三方应用解锁屏幕,Promise方式 | 49| unlock(callback: AsyncCallback<boolean>): void; | 三方应用解锁屏幕,如果屏幕解锁成功。则返回true,否则返回false,callback方式 | 50| unlock():Promise<boolean>; | 三方应用解锁屏幕,如果屏幕解锁成功。则返回true,否则返回false,Promise方式 | 51| lock(callback: AsyncCallback<boolean>): void; | 系统API,锁定屏幕。如果屏幕锁定成功,则返回true,否则返回false,callback方式 | 52| lock():Promise<boolean>; | 系统API,锁定屏幕。如果屏幕锁定成功,则返回true,否则返回false,Promise方式 | 53| SystemEvent { eventType: EventType, params: string } | 定义了系统事件回调参数结构,包含事件类型以及string类型的参数 | 54| onSystemEvent(callback: Callback<SystemEvent>): boolean; | 系统API,注册与系统屏幕锁定相关的系统事件。如果注册系统事件成功,则返回true,否则返回false,callback方式 | 55| sendScreenLockEvent(event: String, parameter: number, callback: AsyncCallback<boolean>): void; | 系统API,锁屏应用给锁屏管理服务发送事件,callback方式 | 56| sendScreenLockEvent(event: String, parameter: number): Promise<boolean>; | 系统API,锁屏应用给锁屏管理服务发送事件,promise方式 | 57 58 59**表 2** EventType-事件类型说明 60 61| 事件类型 | 描述 | 62| -------------------------- | -------------------------- | 63| beginWakeUp | 表示开始唤醒监听事件 | 64| endWakeUp | 表示结束唤醒监听事件 | 65| beginScreenOn | 表示开始亮屏监听事件 | 66| endScreenOn | 表示结束亮屏监听事件 | 67| beginScreenOff | 表示开始灭屏监听事件 | 68| endScreenOff | 表示结束灭屏监听事件 | 69| unlockScreen | 表示请求解锁监听事件 | 70| lockScreen | 表示请求锁定监听事件 | 71| beginExitAnimation | 表示开始退场监听事件 | 72| beginSleep | 表示开始休眠监听事件 | 73| endSleep | 表示结束休眠监听事件 | 74| changeUser | 表示切换用户监听事件 | 75| screenlockEnabled | 表示锁屏是否启用监听事件 | 76| serviceRestart | 表示服务重新启动监听事件 | 77 78### JS 接口使用示例 79 80三方应用向锁屏管理服务进行查询屏幕锁屏状态 81 82```js 83导入模块 84import screenLock from '@ohos.screenlock'; 85 86//Promise方式,在异步回调里面获取锁屏状态结果 87screenLock.isScreenLocked() 88 .then((value) => { 89 //异步回调打印查询锁屏状态的结果 90 console.log(`success to screenLock.isScreenLocked: ${value}`); 91 }).catch((err) => { 92 //打印错误信息 93 console.error(`failed to screenLock.isScreenLocked because ${err.message}`) 94}); 95 96//callback方式,在异步回调里面获取锁屏状态结果 97screenLock.isScreenLocked((err, value) => { 98 if (err) { 99 //打印错误信息 100 console.error(`failed to screenLock.isScreenLocked because ${err.message}`); 101 return; 102 } 103 //打印查询锁屏状态的结果 104 console.log(`success to screenLock.isScreenLocked: ${value}`); 105}); 106 107 //同步方式里面获取锁屏状态结果,如果屏幕当前已锁定,则返回true,否则返回false 108 screenLock.isLocked(); 109 110``` 111 112判断当前设备的屏幕锁定是否安全 113 114```js 115 116//Promise方式,在异步回调里面获取是否安全结果 117screenlock.isSecureMode().then((data) => { 118 console.log('isSecureMode success: data->${JSON.stringify(data)}'); 119}).catch((err) => { 120 console.error('isSecureMode fail, promise: err->${JSON.stringify(err)}'); 121}); 122 123//callback方式,在异步回调里面获取是否安全结果 124screenlock.isSecureMode((err, data)=>{ 125 if (err) { 126 console.error('isSecureMode callback error -> ${JSON.stringify(err)}'); 127 return; 128 } 129 console.info('isSecureMode callback success data -> ${JSON.stringify(err)}'); 130}); 131 132 //同步方式里面获取是否安全结果,如果当前设备的屏幕锁定安全,则返回true,否则返回false 133screenlock.isSecure(); 134 135``` 136 137锁定屏幕 138 139```js 140 141//Promise方式,在异步回调里面获取是否安全结果 142screenlock.lock().then(() => { 143 console.log('lock success'); 144}).catch((err) => { 145 console.error('lock fail, promise: err->${JSON.stringify(err)}'); 146}); 147 148//callback方式,在异步回调里面获取是否安全结果 149screenlock.lock((err) => { 150 if (err) { 151 console.error('lock callback error -> ${JSON.stringify(err)}'); 152 return; 153 } 154 console.info('lock callback success'); 155}); 156 157``` 158 159锁屏应用注册事件说明:锁屏应用向锁屏管理服务注册相关监听事件 160 161 ```js 162let isSuccess = screenlock.onSystemEvent((err, event)=>{ 163 console.log(`onSystemEvent:callback:${event.eventType}`) 164 if (err) { 165 console.log(`onSystemEvent callback error -> ${JSON.stringify(err)}`); 166 } 167}); 168if (!isSuccess) { 169 console.log(`onSystemEvent result is false`) 170} 171 ``` 172 173三方应用向锁屏管理服务发起解锁屏幕请求 174 175 ```js 176 177//三方应用callback方式调用请求解锁 178 179screenLock.unlockScreen((err, data) => { 180 console.log("Screenlock_Test_2300: send unlockScreen issue begin"); 181 if (err) { 182 console.log("Screenlock_Test_2300: unlockScreen fail-->"+err); 183 return; 184 } 185 console.log("Screenlock_Test_2300: unlockScreen success-->"+data); 186}); 187 188screenlock.unlock((err,data) => { 189 if (err) { 190 console.error('unlock error -> ${JSON.stringify(err)}'); 191 return; 192 } 193 console.info('unlock success data -> ${JSON.stringify(data)}'); 194}); 195 196//三方应用Promise方式调用请求解锁 197 198screenLock.unlockScreen().then((data) => { 199 console.log("ScreenLock_Test_Promise_0500: unlockScreen success-->"+data); 200}).catch((error) => { 201 console.error("ScreenLock_Test_Promise_0500: unlockScreen fail--> " + error); 202}); 203 204screenlock.unlock().then((data) => { 205 console.log('unlock success'); 206}).catch((err) => { 207 console.error('unlock fail, : err->${JSON.stringify(err)}'); 208}); 209 210``` 211 212## 相关仓 213 214**主题框架子系统** 215 216[theme\_screenlock_mgr](https://gitee.com/openharmony/theme_screenlock_mgr) 217 218