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 屏幕固定功能的主要内容,如果未能解决你的问题,请参考以下文章

Android 实用代码片段

Android 实用代码片段

在android中从另一个片段获取数据到片段

片段覆盖整个android编辑屏幕

片段布局不覆盖整个屏幕

分享迅为iTOP4412开发板-Android系统屏幕旋转设置