blob: 23bec8b3c06d620362c6e77083f1277bef3677eb [file] [log] [blame]
<html devsite><head>
<title>使用受管理资料</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p><em></em><em></em>受管理资料或工作资料是指在管理方式和视觉外观方面具有额外特殊属性的 Android <a href="/devices/tech/admin/multi-user.html">用户</a></p>
<p>受管理资料的主要目的是为受管理数据(如企业数据)创建一个隔离的安全存储空间。资料管理员可以全权控制数据的范围、入口、出口及其有效期。这些政策可以赋予极高的权限,因此需由受管理资料(而非设备管理员)负责执行。</p>
<ul>
<li><strong>创建</strong>:受管理资料可由主用户中的任何应用创建。用户在创建之前会收到受管理资料行为和政策执行的通知。</li>
<li><strong>管理</strong>:受管理资料由以编程方式调用 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html" class="external">DevicePolicyManager</a> 类中的 API 的应用管理,并且受管理资料的使用受到限制。这类应用称为“资料所有者”,在初始资料设置时定义。<em></em>受管理资料独有的政策涉及应用限制、可更新性和 intent 行为。
</li>
<li><strong>外观处理</strong>:受管理资料中的应用、通知和微件总是带有标记,并且通常内嵌在主用户的界面元素中。</li>
</ul>
<h2 id="data_segregation">数据隔离</h2>
<p>受管理资料使用以下数据隔离规则。</p>
<h3 id="applications">应用</h3>
<p>当同一应用同时存在于主用户和受管理资料中时,应用使用自己的隔离数据限定范围。通常,应用的操作相互独立,彼此之间不能跨越资料-用户边界直接通信。</p>
<h3 id="accounts">帐号</h3>
<p>
受管理资料中的帐号与主用户截然不同。这些帐号无法跨越资料-用户边界来获取凭据。只有在各自环境中的应用才能访问其各自的帐号。
</p>
<h3 id="intents">Intent</h3>
<p>管理员可以控制是否在/不在受管理资料中解析 Intent。在默认情况下,受管理资料中应用的范围被限定到受管理资料内,但 Device Policy API 除外。</p>
<h3 id="settings">设置</h3>
<p>在通常情况下,设置的执行范围限定到受管理资料,但锁定屏幕和加密设置除外,它们的范围依然是整个设备且会在主用户和受管理资料之间共享。在其他情况下,资料所有者在受管理资料之外没有任何设备管理员权限。</p>
<p>
受管理资料会实现为一种新的次要用户,以达到以下目的:
</p>
<pre class="devsite-click-to-copy">
uid = 100000 * userid + appid
</pre>
<p>与常规用户一样,它们具有单独的应用数据:</p>
<pre class="devsite-click-to-copy">
/data/user/&lt;userid&gt;
</pre>
<p>系统会使用 <code>Binder.getCallingUid()</code> 为所有系统请求计算 UserId,并且所有系统状态和响应都由 UserId 分隔。您可以考虑使用 <code>Binder.getCallingUserHandle</code>(而非 <code>getCallingUid</code>),以避免在 Uid 与 UserId 之间引起混淆。</p>
<p>AccountManagerService 为每个用户保留了一个单独的帐号列表。受管理资料与常规次要用户之间的主要区别如下:</p>
<ul>
<li>受管理资料与其父用户相关联,并在启动时与主用户一起启动。</li>
<li>受管理资料的通知由 ActivityManagerService 启用,从而允许受管理资料与主用户共享活动堆栈。</li>
<li>其他共享系统服务包括 IME、A11Y 服务、WLAN 和 NFC。</li>
<li>借助新的 Launcher API,启动器可以在主要资料中的应用旁显示受管理资料中带有标记的应用和加入白名单的微件,而无需切换用户。</li>
</ul>
<h2 id="device_administration">设备管理</h2>
<p>Android 设备管理包括以下类型的企业设备管理员:</p>
<ul>
<li>资料所有者:<em></em>专为自带设备 (BYOD) 环境而设计</li>
<li>设备所有者:<em></em>专为由企业负责的环境而设计</li>
</ul>
<p>为 Android 5.0 添加的大多数新设备管理员 API 仅适用于资料或设备所有者。传统的设备管理员仍然保留,但适用于更简单的仅限消费者情况(例如,查找我的设备)。</p>
<h3 id="profile_owners">资料所有者</h3>
<p>Device Policy Client (DPC) 应用通常用作资料所有者。DPC 应用通常由企业移动管理 (EMM) 合作伙伴(如 Google Apps Device Policy)提供。</p>
<p>资料所有者应用通过发送 <code>ACTION_PROVISION_MANAGED_PROFILE</code> intent 在设备上创建受管理资料。此类资料因具有应用标记以及个性化外观而有别于其他资料。该标记或 Android 设备管理图标标识了哪些应用是工作应用。</p>
<p>EMM 仅对受管理资料(而非个人空间)进行控制,但有一些例外情况,例如执行锁定屏幕。</p>
<h3 id="device_owners">设备所有者</h3>
<p>只能在未配置的设备中设置设备所有者:</p>
<ul>
<li>只能在初始设备设置时进行配置</li>
<li>强制披露始终以快捷设置显示</li>
</ul>
<p>设备所有者可以执行一些资料所有者无法执行的任务,如:</p>
<ul>
<li>擦除设备数据</li>
<li>停用 WLAN/蓝牙</li>
<li>控制 <code>setGlobalSetting</code></li>
<li><code>setLockTaskPackages</code>(能够将可将自己固定到前台的软件包加入白名单)</li>
<li>设置 <code>DISALLOW_MOUNT_PHYSICAL_MEDIA</code>(默认为 <code>FALSE</code>)。如果为 <code>TRUE</code>,则便携式和可合并的物理媒体都无法装载。</li>
</ul>
<h3 id="dpm_api">DevicePolicyManager API</h3>
<p>Android 5.0 及更高版本大幅改进了 DevicePolicyManager,其中包含数十个新的 API,可同时支持企业所有和自带设备 (BYOD) 的管理用例,例如应用限制、证书静默安装和跨资料共享 intent 访问控制。可以从示例 Device Policy Client (DPC) 应用 <a href="https://developer.android.com/samples/BasicManagedProfile/index.html" class="external">BasicManagedProfile.apk</a> 着手使用。有关详情,请参阅<a href="https://developer.android.com/training/enterprise/work-policy-ctrl.html" class="external">构建工作政策控制器</a></p>
<h2 id="user-experience">受管理资料用户体验</h2>
<p>
Android 9 在受管理资料和平台之间建立了更紧密的集成,使用户可以在其设备上更轻松地将工作信息和个人信息隔离开来。受管理资料的这些用户体验变化会体现在启动器中。通过实现这些变化,可在受管理设备间打造一致的用户体验。
</p>
<h3 id="ux-changes-app-tray">具有应用托盘的设备上的用户体验变化</h3>
<p>
Android 9 中 Launcher 3 的受管理资料用户体验变化有助于用户维护单独的个人资料和受管理资料。应用抽屉提供了一个标签式视图,用于区分个人资料应用。当用户首次查看受管理资料标签时,系统会显示一个指导视图,以协助用户浏览受管理资料。用户还可以使用启动器工作标签中的切换开关来开启和关闭受管理资料。
</p>
<h4 id="tabbed-profile-views">标签式资料视图</h4>
<p>
在 Android 9 中,用户可以通过受管理资料在应用抽屉中的个人应用列表和受管理应用列表之间切换。受管理资料处于启用状态时,应用视图会分成两个由 <a href="https://developer.android.com/reference/android/support/v4/view/ViewPager.html" class="external"><code>ViewPager</code></a> 管理的不同 <a href="https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html" class="external"><code>RecyclerViews</code></a>。用户可以使用应用抽屉顶部的资料标签在不同资料的应用视图之间切换。<code>PersonalWorkSlidingTabStrip</code> 类提供标签式资料指示器的参考实现。标签式视图作为 Launcher3 类 <a href="https://android.googlesource.com/platform/packages/apps/Launcher3/+/master/src/com/android/launcher3/allapps/AllAppsContainerView.java" class="external"><code>AllAppsContainerView</code></a> 的一部分实现。
</p>
<table>
<tbody><tr>
<td width="50%">
<img src="/devices/tech/admin/images/Work-profile0.png" width alt="个人标签视图" title="image_tooltip"/>
</td>
<td width="50%">
<img src="/devices/tech/admin/images/Work-profile1.png" width alt="受管理资料切换开关" title="image_tooltip"/>
</td>
</tr>
<tr>
<td><strong>图 1.</strong> 个人标签视图</td>
<td><strong>图 2.</strong> 屏幕底部带有受管理资料切换开关的工作标签视图
</td>
</tr>
</tbody></table>
<h4 id="educational-view">指导视图</h4>
<p>
当用户首次打开工作标签时,Launcher3 还提供在屏幕底部显示指导视图(如<strong>图 3</strong> 所示)的选项。您可以通过指导视图向用户介绍工作标签的用途,以及如何使工作应用更易于访问。
</p>
<p>
指导视图在 Android 9 及更高版本中由 <code>BottomUserEducationView</code> 类定义,相应布局由 <code>work_tab_tottom_user_education_view.xml</code> 控制。在 <code>BottomUserEducationView</code> 中,<code>KEY_SHOWED_BOTTOM_USER_EDUCATION</code> 布尔值默认设为 <code>false</code>。当用户关闭指导视图时,该布尔值将设为 <code>true</code>
</p>
<p>
<img src="/devices/tech/admin/images/Work-profile2.png" width="50%" alt="指导视图" title="image_tooltip"/>
</p><p class="img-caption">
<strong>图 3.</strong> 工作标签中的指导视图
</p>
<p></p>
<h4 id="toggle-to-enable-disable">
在启用/停用受管理资料之间切换
</h4>
<p>
在工作标签中,受管理设备管理员可以在页脚视图中显示切换开关,以便用户启用或停用受管理资料,如上面的<strong>图 2</strong> 所示。从 Android 9 开始,切换开关的源代码可以在 <code>WorkFooterContainer</code> 中找到。受管理资料的启用和停用是异步完成的,并且会应用于所有有效的用户资料。在 Android 9 中,此过程由 <code>WorkModeSwitch</code> 类控制。
</p>
<h3 id="ux-changes-without-an-app-tray">
没有应用托盘的设备上的用户体验变化
</h3>
<p>
对于没有应用托盘的启动器,建议继续将受管理资料应用的快捷方式放置在工作文件夹中。
</p>
<p>
如果工作文件夹无法正确填充,并且新安装的应用未添加到该文件夹,请在 <a href="https://android.googlesource.com/platform/packages/apps/Launcher3/+/master/src/com/android/launcher3/util/ManagedProfileHeuristic.java" class="external"><code>ManagedProfileHeuristic</code></a> 类中的 <code>onAllAppsLoaded</code> 方法内应用以下更改:
</p>
<pre class="prettyprint">for (LauncherActivityInfo app : apps) {
// Queue all items which should go in the work folder.
if (app.getFirstInstallTime() &lt; Long.MAX_VALUE) {
InstallShortcutReceiver.queueActivityInfo(app, context);
}
}</pre>
<h3 id="validating-ux-changes">验证用户体验变化</h3>
<p>
请使用 TestDPC 应用测试受管理资料用户体验实现。
</p>
<ol>
<li>从 Google Play 商店安装 <a href="https://play.google.com/store/apps/details?id=com.afwsamples.testdpc" class="external">TestDPC</a> 应用。
</li>
<li>打开启动器或应用抽屉,然后选择<strong>设置 TestDPC</strong> 图标。
</li>
<li>按照屏幕上的说明设置受管理资料。</li>
<li>打开启动器或应用抽屉,并验证其中是否有工作标签。
</li>
<li>验证工作标签下是否有受管理资料页脚。
</li>
<li>验证是否可以开启和关闭受管理资料开关。受管理资料应相应地启用和停用。
</li>
</ol>
<table>
<tbody><tr>
<td width="33%">
<img src="/devices/tech/admin/images/Work-profile3.png" width alt="TestDPC 资料设置" title="image_tooltip"/>
</td>
<td width="33%">
<img src="/devices/tech/admin/images/Work-profile4.png" width alt="TestDPC 添加帐号" title="image_tooltip"/>
</td>
<td width="33%">
<img src="/devices/tech/admin/images/Work-profile5.png" width alt="TestDPC 设置完成" title="image_tooltip"/>
</td>
</tr>
<tr>
<td>
<strong>图 4.</strong><strong>设置 TestDPC</strong> 中设置受管理资料
</td>
<td>
<strong>图 5.</strong><strong>设置 TestDPC</strong> 中添加帐号
</td>
<td>
<strong>图 6.</strong> 设置完成
</td>
</tr>
</tbody></table>
<table>
<tbody><tr>
<td width="50%">
<img src="/devices/tech/admin/images/Work-profile6.png" width alt="应用抽屉工作标签切换开关处于开启状态" title="image_tooltip"/>
</td>
<td width="50%">
<img src="/devices/tech/admin/images/Work-profile7.png" width alt="应用抽屉工作标签切换开关处于关闭状态" title="image_tooltip"/>
</td>
</tr>
<tr>
<td>
<strong>图 7.</strong> 带有工作标签的应用抽屉。受管理资料页脚开关处于<strong>开启</strong>状态,相应受管理资料已启用。
</td>
<td>
<strong>图 8.</strong> 带有工作标签的应用抽屉。受管理资料页脚开关处于<strong>关闭</strong>状态,相应受管理资料已停用。
</td>
</tr>
</tbody></table>
<h3 id="managed-profile-app-badge">受管理资料应用徽章</h3>
<p>
为确保无障碍性,Android 9 中工作徽章的颜色从橙色改成了蓝色 (#1A73E8)。
</p>
</body></html>