私密空间

图 1. 可通过解锁和锁定私密空间,在设备上显示或隐藏敏感应用。

借助私密空间,用户可以在设备上创建安全的隔离环境,以免敏感应用遭到窥探。私密空间中的应用会显示在启动器的单独容器中,并且当私密空间处于锁定状态时,这些应用不会显示在“最近”视图、通知、“设置”和其他应用中。

沙盒化空间是一种单独的 Android 个人资料。当最终用户在私密空间中添加或安装应用时,该应用会安装在这一新的 Android 个人资料中。系统会将此视为全新应用安装,并且不会将任何应用数据复制到私密空间。当私密空间处于锁定状态时,会停止不公开个人资料的用户;当私密空间处于解锁状态时,会启动该用户。

私密空间中的应用会作为主空间中应用的单独副本进行安装。用户内容(用户生成的内容或下载的内容)和用户账号在私密空间和主空间之间是分开的。只有在私密空间处于解锁状态时,您才能使用系统 Sharesheet 和照片选择器向应用授予对各个空间中内容的访问权限。

私密空间基于 Android 多用户模型,并添加了以下个人资料用户类型

个人资料:
私密
用户类型:
android.os.usertype.profile.PRIVATE

“设置”和启动器应用

您需要更新“设置”和启动器应用,以支持锁定、解锁和隐藏状态。当私密空间处于锁定状态时,启动器会提供用于解锁私密空间的入口点(隐藏状态除外)。当私密空间处于锁定状态时,“设置”应用不得透露私密空间的存在。

可以使用 LauncherApps#getLauncherUserInfo 来标识不公开个人资料的用户。启动器应用需要注册锁定状态解锁状态,并在收到这两种状态的广播时更改其界面中的私密空间状态。这两种状态的广播都有一个名为 EXTRA_USER 的额外常量,您可以使用该常量来指代不公开个人资料的用户。

启动器应用可以使用 UserManager.isQuietModeEnabled 方法检查不公开个人资料状态。

不公开个人资料

不公开个人资料添加了适用于私密空间的全新个人资料类型 android.os.usertype.profile.PRIVATE。不公开个人资料可以在同一设备上与工作资料和克隆资料共存。它是一个与主要 Android 用户分开的沙盒化空间。解锁私密空间后,这些应用会显示在“设置”、Sharesheet、照片选择器和 DocsUI 中。当私密空间处于锁定状态时,私密空间中的应用不会显示在上述任一界面中。一台设备上只能有一个私密空间实例,并且该实例只能供主要用户使用(不能供次要用户使用或存在于其他个人资料中)。

权限

启动器应用必须具有 android.permission.ACCESS_HIDDEN_PROFILES 权限和 android.app.role.RoleManager.ROLE_HOME 角色才能访问不公开个人资料。

对于不使用 AOSP 启动器的实现,需要修改其启动器以添加对不公开个人资料的支持。如需详细了解如何开发具有私密空间的启动器应用,请参阅开发者网站上的启动器应用

Intent

电话 intent 会路由到主要用户并显示通知。所有其他 intent 均仅限于不公开个人资料,并且不会重定向。