Android 9 为企业应用提供的功能

本页面简要介绍了企业 API、功能和行为。 Android 9 中提供的变更。

工作资料界面

Android 9(API 级别 28)默认包含界面更改 可帮助用户区分个人应用和工作应用。设备制造商 如果支持,工作标签页和个人标签页。 我们还使设备用户能够更轻松地开启和关闭工作资料,具体方法如下: 在启动器的工作标签页中添加一个开关。

图 1. 默认启动器的个人标签页和工作标签页 (通过工作资料切换操作)

配置工作资料和受管理设备时,Android 9 包含 动画插图,以帮助设备用户了解这些功能。

跨资料切换应用

Android 9 包含一些 API,用于在 以帮助用户在账号之间切换。例如,电子邮件应用可以 提供一个界面,让用户可以在个人资料和工作单位之间进行切换 个人资料访问两个电子邮件账号。所有应用都可以调用这些 API 来启动 同一应用的主 activity(如果已安装在其他资料中)。接收者 在应用中添加跨资料账号切换功能,请按以下步骤操作: 方法的 CrossProfileApps 类:

  1. 调用 getTargetUserProfiles() 以获取 配置文件,以便在其中启动应用的另一个实例。此方法会检查 应用安装在个人资料中。
  2. 调用 getProfileSwitchingIconDrawable() 来获取可用于代表其他个人资料的图标。
  3. 调用 getProfileSwitchingLabel() 以获取 提示用户切换资料的本地化文本。
  4. 调用 startMainActivity() 以启动 在其他资料中发布应用

检查您要启动的主 activity 是否已在应用 包含 ACTION_MAIN intent 操作,并且包含 CATEGORY_LAUNCHER intent 类别。

以编程方式开启或关闭工作资料

默认启动器(或具有 MANAGE_USERSMODIFY_QUIET_MODE)可通过以下方式开启或关闭工作资料: UserManager.requestQuietModeEnabled()。您可以 检查返回值,以了解用户是否需要确认其 更改凭据因为这种变化可能不会发生 您可以立即聆听 ACTION_MANAGED_PROFILE_AVAILABLEACTION_MANAGED_PROFILE_UNAVAILABLE 广播,以了解何时更新界面。

您的应用可以通过调用 UserManager.isQuietModeEnabled()

将任何应用锁定到设备上

从 Android 9 开始,次要用户的设备所有者和资料所有者 可以将任何应用置于锁定任务模式,从而将该应用锁定在设备屏幕上。 以前,应用开发者必须添加对锁定任务的支持 模式。Android 9 还扩展了锁定任务 用于非关联次要用户的个人资料所有者的 API。请按以下步骤操作 将应用锁定到屏幕:

  1. 调用 DevicePolicyManager.setLockTaskPackages() 以 将应用列入许可名单以进行锁定任务模式。
  2. 调用 ActivityOptions.setLockTaskEnabled() 以启动 已列入许可名单的应用进入锁定任务模式。

如需让应用进入锁定任务模式,请从锁定任务模式中移除该应用 列入许可名单 DevicePolicyManager.setLockTaskPackages()

启用系统界面功能

启用锁定任务模式后,设备所有者和资料所有者可以启用 通过调用 DevicePolicyManager.setLockTaskFeatures(),并将 位字段:

您可以调用 DevicePolicyManager.getLockTaskFeatures() 获取设备在锁定任务模式时可用的功能列表 。当设备退出锁定任务模式时,会恢复到 其他设备政策

不显示错误对话框

在某些环境中,例如零售演示或公共信息 您可能不想向用户显示错误对话框。设备政策 控制器 (DPC) 可以禁止针对崩溃或无响应显示系统错误对话框 添加 DISALLOW_SYSTEM_ERROR_DIALOGS 位用户 限制。设备所有者应用此限制时,会影响所有对话框 但只有主要或次要用户所显示的错误对话框会被阻止 当商家资料所有者应用限制时触发。此限制不 会影响工作资料。

在 Android 9 中,以沉浸式全屏运行的应用 模式不会在 锁定任务模式。提醒气泡是(首次启动时)向用户显示的面板 介绍了如何退出沉浸模式。

在专用设备上支持多用户

Android 9 引入了临时用户的概念,用于提供专用的 设备(以前称为 COSU 设备)。临时用户 短期用户,适用于多名用户共享单个应用的情况 专用设备这包括设备(例如图书馆)上的公开用户会话 酒店签到机,以及固定式会话之间的 一组设备用户,例如轮班员工。

临时用户应在后台创建。它们是作为 次要用户(以及关联的应用和 数据)。要创建 临时用户,设备所有者可以:

  1. 调用时设置 MAKE_USER_EPHEMERAL 标志 DevicePolicyManager.createAndManageUser()
  2. 调用 DevicePolicyManager.startUserInBackground() 以在后台启动临时用户

请注意,以 Android 9 为目标平台的应用应捕获 UserManager.UserOperationException(通话时) createAndManageUser()。调用异常的 getUserOperationResult() 方法,用于了解 未能创建用户。

接收事件通知

DeviceAdminReceiver 会收到以下通知: 以下事件:

向用户显示事件消息

设备所有者可以配置在用户使用设备时向其显示的消息 开始和结束会话:

退出和停止用户

设备所有者可以使用 DevicePolicyManager.setLogoutEnabled():用于指定是否 次要用户可退出登录。要检查是否启用了退出登录,请调用 DevicePolicyManager.isLogoutEnabled()

次要用户的个人资料所有者可以拨打电话 DevicePolicyManager.logoutUser(),用于停止次要用户并 切换回主要用户。

设备所有者可以使用 DevicePolicyManager.stopUser() 来停止 指定的次要用户。

软件包缓存

为了简化具有一组固定用户的共享设备上的用户配置, 例如用于轮班员工的设备,则可以缓存 多用户会话所需的资源:

  1. 致电 DevicePolicyManager.setKeepUninstalledPackages() 用于指定要保留为 APK 的软件包列表。要检索这些元素的列表, 包裹, 调用 DevicePolicyManager.getKeepUninstalledPackages()

  2. 调用 DevicePolicyManager.installExistingPackage() 通过 setKeepUninstalledPackages()

其他方法和常量

Android 9 还包含以下方法和常量,以进一步支持 共用设备上的用户会话:

清除软件包数据并移除账号

设备所有者和个人资料所有者可以拨打电话 clearApplicationUserData(),用于清除用户数据 特定软件包要从以下位置移除账号: AccountManager,设备和资料所有者可以拨打电话 removeAccount()

用户限制和加强对设置的控制

Android 9 引入了一组针对 DPC 的用户限制,以及 在设备上配置 APN、时间和时区以及系统设置。

配置 APN

设备所有者可以在 DevicePolicyManager 类,用于在 设备:

配置时间和时区

设备所有者可以在 DevicePolicyManager 类,用于设置时间和时区 :

针对重要设置强制执行用户限制

Android 9 添加了用户限制,以停用系统功能和设置。接收者 添加限制, 调用 将DevicePolicyManager.addUserRestriction()替换为以下其中一项 以下 UserManager 常量:

如果状态为 DISALLOW_CONFIG_BRIGHTNESS且 强制执行 DISALLOW_CONFIG_SCREEN_TIMEOUT 设备所有者仍然可以设置屏幕 亮度屏幕亮度 模式屏幕超时设置 在设备上使用 API DevicePolicyManager.setSystemSetting()

按流量计费的流量

设备所有者和资料所有者可以阻止应用使用设备的 按流量计费的数据网络当用户 对因费用、流量限制或电池电量和 性能问题要阻止应用使用按流量计费的网络,请调用 DevicePolicyManager.setMeteredDataDisabledPackages() 来传递软件包名称列表要检索当前受限的应用,请调用 DevicePolicyManager.getMeteredDataDisabledPackages()

如需详细了解 Android 中的按流量计费的数据,请参阅优化网络流量 用法

迁移设备政策控制器 (DPC)

设备政策控制器 (DPC) 可以转让设备所有权或 向另一个设备政策控制器 (DPC) 发送工作资料。您可以转让所有权以转移某些功能 Android 管理 API 来从 Google Cloud 迁移设备, 或帮助 IT 管理员迁移到您的 EMM。因为您只是 设备政策控制器 (DPC) 所有权发生变化时,您将无法使用此功能 管理,例如从受管理的设备迁移到工作资料,或 反之亦然。

您可以使用设备管理政策 XML 资源执行以下操作: 指明此版本的 DPC 支持迁移。目标设备政策控制器 (DPC) 表示可以通过添加名为 <support-transfer-ownership>。以下示例说明了如何在 设备政策控制器 (DPC) 的设备管理 XML 文件:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <support-transfer-ownership />
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
    </uses-policies>
</device-admin>

希望将所有权移交给新 DPC 应用的 DPC 可以检查目标 DPC 是否 版本通过调用 DeviceAdminInfo 方法来支持迁移 supportsTransferOwnership()。转移前 则源设备政策控制器 (DPC) 有责任通过 比较应用签名PackageManager 类包括 方法配合使用代码签名签名。

Android 通过所有权来维护源 DPC 的系统和用户政策 传输:DPC 不需要迁移这些内容。源 DPC 可将自定义数据传递给 在 PersistableBundle 中使用键值对指定目标 DPC。在 则目标 DPC 可通过调用 DevicePolicyManager.getTransferOwnershipBundle()

转让受管设备或工作资料所有权的步骤如下 相同:

  1. 源 DPC 检查目标 DPC 的版本是否支持迁移并 确认目标 DPC 的应用签名与预期值匹配。
  2. 来源 DPC 调用 transferOwnership() 以启动 。
  3. 系统会将目标 DPC 设为“活跃管理员”,并设置 指定为受管理设备或工作资料的所有者。
  4. 目标 DPC 接收回调 onTransferOwnershipComplete(),可配置 使用 bundle 参数的值。
  5. 如果转让操作出错,系统会将所有权还原到 源 DPC。如果来源设备政策控制器 (DPC) 需要确认所有权转让 成功,请调用 isAdminActive() 以检查源 DPC 不再是活跃管理员。

在工作资料中运行的所有应用都会收到 ACTION_PROFILE_OWNER_CHANGED广播: 个人资料所有者发生变化。在受管设备上运行的应用会收到 ACTION_DEVICE_OWNER_CHANGED 广播, 设备所有者更改。

完全托管设备中的工作资料

转让两个以设备所有者和资料所有者身份运行的 DPC 实例 分两个阶段完成当个人资料和工作资料 有关联,请按以下顺序完成转移:

  1. 首先,转移工作资料的所有权。
  2. 等待 DeviceAdminReceiver 回调 onTransferAffiliatedProfileOwnershipComplete() 以确认工作资料已转移到目标设备政策控制器 (DPC)。
  3. 最后,将受管设备的所有权转让给目标 DPC。

推迟无线下载 (OTA) 更新

设备所有者可以将设备的 OTA 系统更新最多推迟 90 天, 在关键时段(例如 节假日)。在发生任何已定义的事件后,系统会强制规定 60 天缓冲期 冻结期,以防止无限期冻结设备。

在冻结期内:

  • 设备不会收到任何有关待完成 OTA 更新的通知。
  • 设备不会向操作系统安装任何 OTA 更新。
  • 设备用户无法在“设置”中手动检查有无 OTA 更新。

要设置冻结期,请调用 SystemUpdatePolicy.setFreezePeriods()。因为严寒 周期每年重复一次,该周期的开始日期和结束日期表示 按从年份开始计算的天数的整数值。开始日期必须是 在先前的任何冻结期结束至少 60 天后开始。设备 所有者可以呼叫 SystemUpdatePolicy.getFreezePeriods() 以 获取之前在系统更新政策对象上设置的冻结期列表。 DevicePolicyManager.getSystemUpdatePolicy() 已 更新后,系统会返回设备所有者设置的所有冻结期。

限制共享到工作资料

资料所有者可以禁止用户将个人数据分享到工作资料中 通过添加用户限制 DISALLOW_SHARE_INTO_MANAGED_PROFILE。 此限制可防止下列 Intent 处理和共享:

  • 个人资料应用与工作资料应用分享数据和文件。
  • 从个人资料中选择内容的工作资料应用,例如 图片或文件。

设置此限制后,您的 DPC 仍可允许跨资料活动 调用 intent addCrossProfileIntentFilter()

硬件保护密钥和机器证书

Android 9 添加了一些 API 来帮助您使用密钥和证书, 来安全地识别设备在资料所有者或设备中运行的 DPC 所有者模式(即委派证书安装程序)可以 完成以下任务:

通过结合这些 API,企业可以安全地识别设备并确认 在提供访问权限之前确保了其完整性:

  1. Android 设备在安全硬件中生成新的私钥。 由于私钥永远不会离开安全硬件,因此始终保持机密状态。
  2. 设备使用该密钥创建和发送证书签名请求 (CSR) 发送到服务器。CSR 包含认证记录,该记录包含 设备 ID。
  3. 服务器验证证书链(基于 Google 证书的 root 权限) 并从认证记录中提取设备元数据。
  4. 服务器确认安全硬件保护私钥并 确保设备 ID 与企业记录相符。服务器还可以 确保 Android 系统和补丁版本符合所有要求。
  5. 服务器根据 CSR 生成证书,并将该证书发送到 。
  6. 设备将证书与私钥(保留在 安全硬件),使应用能够连接到企业服务。

更多安全 API、功能和变更

安全日志和网络日志的 ID

Android 9 将 ID 包含在安全和网络活动日志中。数字 ID 每个事件单调递增,IT 管理员更容易发现 日志中的数据缺口因为安全日志和网络日志是相互独立的 集合,系统将保留单独的 ID 值。

调用 SecurityEvent.getId()DnsEvent.getId()ConnectEvent.getId():用于获取 ID 值。系统 每当 DPC 启用日志记录或设备重启时,都会重置该 ID。 通过调用以下方法来提取安全日志: DevicePolicyManager.retrievePreRebootSecurityLogs() 不包含这些 ID。

安全日志记录

安全日志记录会为每个 SecurityEvent 分配一个日志级别。要获取日志级别, 调用 getLogLevel()。此方法会返回一个日志级别值, 可以是以下项之一:LEVEL_INFOLEVEL_WARNINGLEVEL_ERROR

Android 9 会将下表中列出的事件记录到安全性中 日志。如需检查事件的代码,请调用 getTag()。接收者 检索事件数据,请调用 getData()

标记 活动说明
TAG_CERT_AUTHORITY_INSTALLED 尝试将新的根证书安装到系统的凭据存储中。
TAG_CERT_AUTHORITY_REMOVED 尝试从系统凭据存储空间中移除根证书。
TAG_CERT_VALIDATION_FAILURE Wi-Fi 证书在连接期间未通过验证检查。
TAG_CRYPTO_SELF_TEST_COMPLETED 系统已完成加密自检。
TAG_KEYGUARD_DISABLED_FEATURES_SET 管理员应用停用了设备或工作资料锁定屏幕的功能。
TAG_KEY_DESTRUCTION 尝试删除加密密钥。
TAG_KEY_GENERATED 尝试生成新的加密密钥。
TAG_KEY_IMPORT 尝试导入新的加密密钥。
TAG_KEY_INTEGRITY_VIOLATION Android 检测到加密密钥或身份验证密钥已损坏。
TAG_LOGGING_STARTED 已开始录制安全日志记录。
TAG_LOGGING_STOPPED 安全日志记录已停止记录。
TAG_LOG_BUFFER_SIZE_CRITICAL 安全日志缓冲区已达到其容量的 90%。
TAG_MAX_PASSWORD_ATTEMPTS_SET 管理员应用设置了允许输错密码的次数。
TAG_MAX_SCREEN_LOCK_TIMEOUT_SET 管理员应用设置最长屏幕锁定超时时间。
TAG_MEDIA_MOUNT 设备装载了可移动存储媒介。
TAG_MEDIA_UNMOUNT 设备卸载了可移动存储媒介。
TAG_OS_SHUTDOWN Android 系统关机。
TAG_OS_STARTUP Android 系统已启动。
TAG_PASSWORD_COMPLEXITY_SET 管理应用设置了密码复杂度要求。
TAG_PASSWORD_EXPIRATION_SET 管理员应用设置了密码有效期。
TAG_PASSWORD_HISTORY_LENGTH_SET 管理员应用设置了密码历史记录长度,以防止用户重复使用用过的密码。
TAG_REMOTE_LOCK 管理员应用锁定了设备或工作资料。
TAG_USER_RESTRICTION_ADDED 管理员应用设置了用户限制。
TAG_USER_RESTRICTION_REMOVED 管理员应用移除了用户限制。
TAG_WIPE_FAILURE 尝试擦除设备或工作资料时失败。

工作资料锁定屏幕验证

从 Android 9 开始,资料所有者可以要求用户设置单独的锁定方式 使用 DISALLOW_UNIFIED_PASSWORD 用户限制。接收者 检查用户是否为其设备设置了相同的锁屏验证方式, 工作资料, 通话 DevicePolicyManager.isUsingUnifiedPassword()

如果设备设有单独的工作资料锁定屏幕, DevicePolicyManager.setMaximumTimeToLock() 仅设置 为工作资料(而非整个设备)设置锁屏时间。

开发者工具访问权限

为了帮助保留工作资料中的工作数据,Android 调试桥 (adb) 工具 无法访问工作资料中的目录和文件。

支持更多生物识别选项

Android 9 增加了对生物识别硬件身份验证的精细控制, 工作资料的锁定屏幕。调用现有 DevicePolicyManager.setKeyguardDisabledFeatures() 方法(包含 KEYGUARD_DISABLE_FACEKEYGUARD_DISABLE_IRIS。 如需停用设备提供的所有生物识别身份验证方法,请添加 KEYGUARD_DISABLE_BIOMETRICS

弃用设备管理政策

对于使用设备的 DPC,Android 9 将下列政策标记为已弃用 管理员。这些政策将继续有效 。从 Android 10 版本开始 当设备管理员调用相同的政策时,将抛出 SecurityException。

一些应用利用设备管理员进行用户设备管理。对于 例如锁定和擦除丢失的设备以下政策将继续有效 可用于启用此功能:

如需详细了解这些变化,请参阅设备管理 弃用

简化了二维码注册流程

内置二维码库

Android 9 捆绑了一个 QR 码库,以简化 QR 码设备 预配。IT 管理员无需再手动输入 Wi-Fi 详细信息即可进行设置 。但 Android 9 可以改为包含这些 Wi-Fi 详细信息 二维码。当 IT 管理员使用公司自有设备扫描二维码时 设备,则设备会自动连接到 Wi-Fi 并进入配置 整个流程,而无需任何其他手动输入。

QR 码配置方法支持以下配置 extra 指定 Wi-Fi 详细信息:

使用配置 extra 设置日期和时区

QR 码配置方法支持使用配置 extra 来设置时间和 时区:

擦除数据选项

设备管理员可以在移除工作时向用户显示个性化消息 个人资料或次要用户该消息有助于设备用户了解 IT 管理员移除了工作资料或次要用户。致电 wipeData(int, CharSequence),并提供一个简短的 说明性消息。当被主要用户或设备所有者调用时,系统会 不显示消息并开始将设备恢复出厂设置。

如需从嵌入式 eUICC SIM 卡中移除订阅数据,请调用 wipeData(),并在 flags 中包含 WIPE_EUICC 参数。

适用于关联商家资料所有者的方法

以下方法适用于关联的商家资料 所有者: