Android 屏幕固定功能
Posted 虫师魁拔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 屏幕固定功能相关的知识,希望对你有一定的参考价值。
android 屏幕固定功能实现依靠的是 LockTaskController.java 中变量 mLockTaskModeTasks,Android R 上这个文件移到 frameworks/base/services/core/java/com/android/server/wm/ 目录,之前是在 com/android/server/am/ ,除了路径其他基本一致。方法名都没变。修改这个路径同步添加了一个新的类 ActivityTaskManagerService.java ,也在 wm 目录下,调用 LockTaskController 接口的方式从 AMS 换到 ActivityTaskManagerService 中。LockTaskController接口没变。
通过 LockTaskController.startLockTaskMode() 给 mLockTaskModeTasks.add 屏幕固定的应用
通过 LockTaskController.stopLockTaskMode() 或 clearLockedTask() 清除关闭屏幕固定
系统在启动Activity时,会调用 LockTaskController.isLockTaskModeViolation() 来判断是否有屏幕固定的,然后决定能不能继续启动 Activity
// 判断当前是不是违反屏幕固定规则,可用于activity启动时判断,能不能启动新的activity
private boolean isLockTaskModeViolationInternal(TaskRecord task, boolean isNewClearTask) {
// TODO: Double check what's going on here. If the task is already in lock task mode, it's
// likely whitelisted, so will return false below.
if (isTaskLocked(task) && !isNewClearTask) {
// If the task is already at the top and won't be cleared, then allow the operation
return false;
}
// Allow recents activity if enabled by policy
if (task.isActivityTypeRecents() && isRecentsAllowed(task.userId)) {
return false;
}
// Allow emergency calling when the device is protected by a locked keyguard
if (isKeyguardAllowed(task.userId) && isEmergencyCallTask(task)) {
return false;
}
// 如果mLockTaskModeTasks是空的,表示未添加过屏幕固定
// 或者当前启动task符合系统规则,也可以
return !(isTaskWhitelisted(task) || mLockTaskModeTasks.isEmpty());
}
以上是关于Android 屏幕固定功能的主要内容,如果未能解决你的问题,请参考以下文章