本頁概要列出 Android 9 所提供的企業 API、功能和行為變更。
工作資料夾使用者介面
Android 9 (API 級別 28) 在預設啟動器中加入了使用者介面變更,協助使用者分隔個人應用程式與工作應用程式。支援這項功能的裝置製造商可能會在不同的工作和個人分頁中顯示使用者的應用程式。此外,在啟動器的工作分頁中加入切換鈕,裝置使用者也能更輕鬆地開啟或關閉工作資料夾。
佈建工作資料夾和受管理的裝置時,Android 9 會提供動畫插圖,協助裝置使用者瞭解這些功能。
在不同設定檔中切換應用程式
Android 9 提供的 API 可透過不同設定檔啟動另一個應用程式的執行個體,協助使用者切換帳戶。例如,電子郵件應用程式可提供 UI 讓使用者切換個人資料夾和工作資料夾,以便存取兩個電子郵件帳戶。所有應用程式都能呼叫這些 API,以啟動相同應用程式的主要活動 (如果已安裝於其他設定檔中)。如要將跨設定檔帳戶切換加入應用程式,請按照下列步驟呼叫 CrossProfileApps
類別的方法:
- 呼叫
getTargetUserProfiles()
取得可用於啟動另一個應用程式執行個體的設定檔清單。這個方法會檢查應用程式是否已安裝在設定檔中。 - 呼叫
getProfileSwitchingIconDrawable()
以取得用於代表其他設定檔的圖示。 - 呼叫
getProfileSwitchingLabel()
以取得提示使用者切換設定檔的本地化文字。 - 呼叫
startMainActivity()
以在其他設定檔中啟動應用程式的執行個體。
請在應用程式的資訊清單檔案中,確認您要啟動的主要活動已宣告 ACTION_MAIN
意圖動作,並納入 CATEGORY_LAUNCHER
意圖類別。
透過程式輔助方式開啟或關閉工作資料夾
預設啟動器 (或具有 MANAGE_USERS
或 MODIFY_QUIET_MODE
權限的應用程式) 可以呼叫 UserManager.requestQuietModeEnabled()
來開啟或關閉工作資料夾。您可以檢查傳回值,瞭解使用者是否必須在狀態變更前確認憑證。由於變更可能不會立即發生,因此請監聽 ACTION_MANAGED_PROFILE_AVAILABLE
或 ACTION_MANAGED_PROFILE_UNAVAILABLE
廣播,瞭解更新使用者介面的時機。
應用程式可以呼叫 UserManager.isQuietModeEnabled()
來檢查工作資料夾的狀態。
在裝置上鎖定任何應用程式
從 Android 9 開始,裝置擁有者和設定檔擁有者 (次要使用者) 可將任何應用程式進入鎖定任務模式,鎖定裝置螢幕。先前,應用程式開發人員必須在應用程式中新增鎖定工作模式支援功能。Android 9 也會將鎖定工作 API 擴充至非關聯次要使用者的個人資料擁有者。如要將應用程式鎖定在畫面中,請按照下列步驟操作:
- 呼叫
DevicePolicyManager.setLockTaskPackages()
即可列出用於鎖定工作模式的應用程式。 - 呼叫
ActivityOptions.setLockTaskEnabled()
可啟動已加入許可清單的應用程式,進入鎖定任務模式。
如要在鎖定工作模式下停止應用程式,請使用 DevicePolicyManager.setLockTaskPackages()
,將應用程式從鎖定工作模式的許可清單中移除。
啟用系統 UI 功能
啟用鎖定工作模式後,裝置擁有者和設定檔擁有者只要呼叫 DevicePolicyManager.setLockTaskFeatures()
,並傳遞下列功能旗標的位元欄位,就能在裝置上啟用特定系統 UI 功能:
LOCK_TASK_FEATURE_NONE
LOCK_TASK_FEATURE_SYSTEM_INFO
LOCK_TASK_FEATURE_HOME
LOCK_TASK_FEATURE_NOTIFICATIONS
只能與LOCK_TASK_FEATURE_HOME
合併使用。LOCK_TASK_FEATURE_KEYGUARD
LOCK_TASK_FEATURE_OVERVIEW
只能與LOCK_TASK_FEATURE_HOME
合併使用。LOCK_TASK_FEATURE_GLOBAL_ACTIONS
啟用鎖定工作模式時,您可以呼叫 DevicePolicyManager.getLockTaskFeatures()
來取得裝置的可用功能清單。當裝置結束鎖定工作模式時,會返回其他裝置政策要求的狀態。
隱藏錯誤對話方塊
在某些環境中,例如顯示零售示範或公開資訊的環境中,您可能不會想要向使用者顯示錯誤對話方塊。裝置政策控制器 (DPC) 可以新增 DISALLOW_SYSTEM_ERROR_DIALOGS
使用者限制,針對當機或無回應的應用程式隱藏系統錯誤對話方塊。此限制會影響裝置擁有者套用的所有對話方塊,但只有在設定檔擁有者套用限制時,只有主要或次要使用者中顯示的錯誤對話方塊會遭到封鎖。這項限制不會影響工作資料夾。
在 Android 9 中,以沉浸式全螢幕模式執行的應用程式在鎖定任務模式下不會顯示提醒泡泡。提醒泡泡是使用者 (首次啟動時) 顯示的面板,說明如何退出沉浸模式。
支援多位使用者使用專屬裝置
Android 9 導入專用裝置 (原稱 COSU 裝置) 的「臨時使用者」概念。臨時使用者屬於短期使用者,適用於多位使用者共用單一專用裝置的情況。這包括圖書館或餐旅服務資訊站等裝置上的公開使用者工作階段,以及一組固定使用者 (例如輪班人員) 間的永久工作階段。
暫時使用者應在背景建立。這類執行個體是在裝置上建立為次要使用者,並在資料停止、切換或重新啟動裝置時移除 (連同相關聯的應用程式和資料)。如要建立臨時使用者,裝置擁有者可以執行下列操作:
- 在呼叫
DevicePolicyManager.createAndManageUser()
時設定MAKE_USER_EPHEMERAL
旗標。 - 呼叫
DevicePolicyManager.startUserInBackground()
,在背景啟動臨時使用者。
請注意,指定 Android 9 的應用程式在呼叫 createAndManageUser()
時,應擷取 UserManager.UserOperationException
。呼叫例外狀況的 getUserOperationResult()
方法,找出無法建立使用者的原因。
接收事件通知
DeviceAdminReceiver
會收到下列事件的通知:
onUserStarted()
:在使用者開始時呼叫。onUserSwitched()
:在使用者切換完成時呼叫。onUserStopped()
:當使用者停止或登出時,會與onUserRemoved()
一起呼叫。
向使用者顯示活動訊息
裝置擁有者可以設定要在使用者開始和結束工作階段時顯示的訊息:
- 使用
DevicePolicyManager.setStartUserSessionMessage()
可設定在使用者工作階段開始時向使用者顯示的訊息。如要擷取訊息,請呼叫DevicePolicyManager.getStartUserSessionMessage()
。 - 使用
DevicePolicyManager.setEndUserSessionMessage()
可設定要在使用者工作階段結束時向使用者顯示的訊息。如要擷取訊息,請呼叫DevicePolicyManager.getEndUserSessionMessage()
。
登出並停止使用者
裝置擁有者可以使用 DevicePolicyManager.setLogoutEnabled()
指定是否要為次要使用者啟用登出功能。如要確認登出功能是否已啟用,請呼叫 DevicePolicyManager.isLogoutEnabled()
。
次要使用者的設定檔擁有者可以呼叫 DevicePolicyManager.logoutUser()
來停止次要使用者,並切換回主要使用者。
裝置擁有者可以使用 DevicePolicyManager.stopUser()
停止指定的次要使用者。
套件快取
如要針對一組固定的使用者 (例如輪班工作站的裝置) 在共用裝置上簡化使用者帳戶佈建流程,您可以快取多使用者工作階段所需的套件:
呼叫
DevicePolicyManager.setKeepUninstalledPackages()
以指定要以 APK 形式保留的套件清單。如要擷取這些套件的清單,請呼叫DevicePolicyManager.getKeepUninstalledPackages()
。呼叫
DevicePolicyManager.installExistingPackage()
以安裝透過setKeepUninstalledPackages()
移除後保留的套件。
其他方法和常數
Android 9 還包含下列方法和常數,可進一步支援共用裝置上的使用者工作階段:
DevicePolicyManager.getSecondaryUsers()
會取得裝置上所有次要使用者的清單。DISALLOW_USER_SWITCH
是使用者限制,只要呼叫DevicePolicyManager.addUserRestriction()
即可啟用使用者切換功能。LEAVE_ALL_SYSTEM_APPS_ENABLED
是DevicePolicyManager.createAndManageUser()
適用的旗標。設定完成後,系統就不會在使用者佈建期間停用系統應用程式。- 如果使用者無法建立使用者,
DevicePolicyManager.createAndManageUser()
會擲回UserManager.UserOperationException
,例外狀況會包含失敗原因。
清除套件資料及移除帳戶
裝置擁有者和設定檔擁有者可以呼叫 clearApplicationUserData()
,以清除特定套件的使用者資料。如要從 AccountManager
移除帳戶,裝置和設定檔擁有者可以呼叫 removeAccount()
。
使用者限制並進一步掌控設定
Android 9 導入了一系列對裝置政策控制器 (DPC) 的使用者限制,並且能夠在裝置上設定 APN、時間和時區,以及系統設定。
設定 APN
裝置擁有者可使用 DevicePolicyManager
類別中的下列方法,在裝置上設定 APN:
addOverrideApn()
updateOverrideApn()
removeOverrideApn()
getOverrideApns()
setOverrideApnEnabled()
isOverrideApnEnabled()
設定時間和時區
裝置擁有者可在 DevicePolicyManager
類別中使用以下方法,設定裝置上的時間和時區:
對重要設定強制執行使用者限制
Android 9 新增了使用者限制,用於停用系統功能和設定。如要新增限制,請使用下列其中一個 UserManager
常數呼叫 DevicePolicyManager.addUserRestriction()
:
DISALLOW_AIRPLANE_MODE
DISALLOW_AMBIENT_DISPLAY
DISALLOW_CONFIG_BRIGHTNESS
DISALLOW_CONFIG_DATE_TIME
DISALLOW_CONFIG_LOCATION
DISALLOW_CONFIG_SCREEN_TIMEOUT
DISALLOW_PRINTING
如果裝置強制執行 DISALLOW_CONFIG_BRIGHTNESS
和 DISALLOW_CONFIG_SCREEN_TIMEOUT
,裝置擁有者仍可使用 API DevicePolicyManager.setSystemSetting()
在裝置上設定螢幕亮度、螢幕亮度模式和螢幕逾時設定。
計量付費資料
裝置擁有者和設定檔擁有者可防止應用程式使用裝置的計量數據網路。如果使用者因費用、數據用量限製或電池和效能問題,對高數據用量感到敏感,則屬於「計量付費」網路。如要防止應用程式使用計量付費網路,請呼叫 DevicePolicyManager.setMeteredDataDisabledPackages()
,並傳遞套件名稱清單。如要擷取目前受限制的應用程式,請呼叫 DevicePolicyManager.getMeteredDataDisabledPackages()
。
如要進一步瞭解 Android 中的計量付費資料,請參閱「最佳化網路數據用量」。
遷移 DPC
裝置政策控制器 (DPC) 可將裝置或工作資料夾的擁有權轉移給其他 DPC。您可以轉移擁有權,以便將部分功能移至 Android Management API、從舊版 DPC 遷移裝置,或是協助 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 應用程式,可以呼叫 DeviceAdminInfo
方法 supportsTransferOwnership()
,確認目標 DPC 版本是否支援遷移作業。轉移擁有權之前,來源 DPC 會透過比較應用程式簽名來驗證目標 DPC。PackageManager
類別包含使用程式碼簽署簽名的方法。
Android 會透過擁有權轉移程序來維護來源 DPC 的系統和使用者政策,因此您不需要遷移 DPC。來源 DPC 可以使用 PersistableBundle
中的鍵/值組合,將自訂資料傳送至目標 DPC。成功轉移後,目標 DPC 可以呼叫 DevicePolicyManager.getTransferOwnershipBundle()
來擷取這項資料。
轉移受管理裝置或工作資料夾擁有權的步驟相同:
- 來源 DPC 會檢查目標 DPC 版本是否支援遷移作業,並確認目標 DPC 的應用程式簽名與預期值相符。
- 來源 DPC 會呼叫
transferOwnership()
以啟動移轉作業。 - 系統會將目標 DPC 設為「有效管理員」,並將其設為受管理裝置或工作資料夾的擁有者。
- 目標 DPC 會接收回呼
onTransferOwnershipComplete()
,並使用bundle
引數中的值自行設定。 - 如果移轉作業出現錯誤,系統會將擁有權還原為來源 DPC。如果來源 DPC 必須確認擁有權轉移成功,請呼叫
isAdminActive()
,確認來源 DPC 不再是有效的管理員。
當設定檔擁有者變更時,在工作資料夾中執行的所有應用程式都會收到 ACTION_PROFILE_OWNER_CHANGED
廣播。在受管理裝置上執行的應用程式會在裝置擁有者變更時收到 ACTION_DEVICE_OWNER_CHANGED
廣播訊息。
完全受管理裝置上的工作資料夾
轉移以裝置擁有者身分和設定檔擁有者身分執行的兩個 DPC 執行個體,分為兩個階段。如果個人資料夾和工作資料夾相關聯,請按照下列順序完成轉移作業:
- 首先,請轉移工作資料夾的擁有權。
- 等待
DeviceAdminReceiver
回呼onTransferAffiliatedProfileOwnershipComplete()
,確認工作資料夾已轉移到目標 DPC。 - 最後,將受管理裝置的擁有權轉移給目標 DPC。
延後無線更新 (OTA)
裝置擁有者可將 OTA 系統更新延後至裝置最多 90 天,以便凍結在這些裝置上執行的 OS 版本,例如節慶期間。在任何定義的凍結期間,系統都會強制執行 60 天的必要緩衝區,防止裝置無限期凍結。
凍結期間:
- 裝置不會收到任何有關 OTA 更新的通知。
- 裝置不會為 OS 安裝任何 OTA 更新。
- 裝置使用者無法在「設定」中手動檢查 OTA 更新。
如要設定凍結期間,請呼叫 SystemUpdatePolicy.setFreezePeriods()
。由於凍結期間每年都會重複,因此期間的開始與結束日期會以整數呈現,計算從年度開始起算的天數。開始日期必須在前一個凍結期間結束後的至少 60 天。裝置擁有者可呼叫 SystemUpdatePolicy.getFreezePeriods()
,取得先前在系統更新政策物件中設定的凍結期間清單。DevicePolicyManager.getSystemUpdatePolicy()
已更新,可傳回裝置擁有者設定的任何凍結期間。
限制工作資料夾的共用權限
設定檔擁有者可以新增使用者限制 DISALLOW_SHARE_INTO_MANAGED_PROFILE
,防止使用者將個人資料分享到裝置上的工作資料夾。這項限制禁止下列意圖處理和共用情況:
- 個人資料夾應用程式會透過工作資料夾應用程式分享資料和檔案。
- 工作資料夾應用程式會從個人資料夾中挑選項目,例如相片或檔案。
設定這項限制後,DPC 仍可呼叫 addCrossProfileIntentFilter()
來允許跨設定檔活動意圖。
硬體安全金鑰和機器憑證
Android 9 新增的 API 可協助您使用可結合用於安全識別裝置的金鑰和憑證。在設定檔擁有者或裝置擁有者模式下執行的 DPC 可完成以下工作:委派憑證安裝程式:
- 在 Android 裝置的安全硬體 (例如受信任的執行環境 (TEE) 或安全元件 (SE) 中產生金鑰和憑證。產生的金鑰絕不會離開安全硬體,而且可從 Android KeyChain 中使用。呼叫
DevicePolicyManager.generateKeyPair()
提供演算法 (請參閱KeyPairGenerator
) 和任何您要認證的硬體 ID,例如序號或 IMEI。如要進一步瞭解安全硬體變更,請參閱 Android 9 安全性強化功能。 - 將憑證與裝置產生的現有金鑰建立關聯。呼叫
DevicePolicyManager.setKeyPairCertificate()
,提供現有金鑰的別名和憑證鏈 (從分葉憑證開始,並依序納入信任鏈結)。 - 使用前,請確認安全硬體保護金鑰。如要查看透過何種機制保護金鑰,請按照「金鑰認證」一節中的步驟操作。
- 裝置擁有者和委派憑證安裝程式會收到含有 Android 系統版本的裝置硬體 ID 簽署陳述式。呼叫
DevicePolicyManager.generateKeyPair()
,在idAttestationFlags
引數中傳遞一或多個ID_TYPE_BASE_INFO
、ID_TYPE_SERIAL
、ID_TYPE_IMEI
或ID_TYPE_MEID
。傳回的憑證會包含認證記錄中的硬體 ID。如果您不想加入硬體 ID,請傳遞0
。設定檔擁有者只能接收製造商資訊 (藉由傳遞ID_TYPE_BASE_INFO
)。如要檢查裝置是否能認證 ID,請呼叫isDeviceIdAttestationSupported()
。 - 將金鑰憑證設為不選取,以免裝置使用者濫用企業金鑰 (在非企業工作中)。系統不會在挑選器面板中納入無法選取的憑證。在
DeviceAdminReceiver.onChoosePrivateKeyAlias()
回呼方法中,將別名傳回至企業金鑰,讓系統代表使用者自動選取憑證。如要將索引鍵設為不可選取,請呼叫下列DevicePolicyManager
方法:setKeyPairCertificate()
,並針對isUserSelectable
引數傳遞false
。installKeyPair (ComponentName, PrivateKey, Certificate[], String, int)
,並在flags
引數中省略INSTALLKEY_SET_USER_SELECTABLE
。
藉由結合這些 API,企業即可在提供存取權前,安全地識別裝置並確認完整性:
- Android 裝置會在安全硬體中產生新的私密金鑰。私密金鑰絕不會離開安全硬體,因此絕不會外洩。
- 裝置會使用金鑰建立憑證簽署要求 (CSR),並傳送至伺服器。客戶服務代表含有裝置 ID 的認證記錄。
- 伺服器會驗證憑證鏈結 (已啟用 Google 憑證),並從認證記錄中擷取裝置中繼資料。
- 伺服器會確認安全硬體保護私密金鑰,且裝置 ID 與企業記錄相符。伺服器還可以檢查 Android 系統和修補程式版本是否符合任何需求。
- 伺服器會從 CSR 產生憑證,然後將憑證傳送至裝置。
- 裝置會將憑證與儲存在安全硬體中的私密金鑰配對,讓應用程式連線至企業服務。
其他安全性 API、功能和異動
安全性記錄和網路記錄檔的 ID
Android 9 安全性和網路活動記錄中包含 ID。每個事件的數字 ID 單調遞增,可讓 IT 管理員更輕鬆地在記錄中找出落差。由於安全性記錄和網路記錄為不同的集合,因此系統會維護不同的 ID 值。
呼叫 SecurityEvent.getId()
、DnsEvent.getId()
或 ConnectEvent.getId()
來取得 ID 值。每當 DPC 啟用記錄或裝置重新啟動時,系統都會重設 ID。呼叫 DevicePolicyManager.retrievePreRebootSecurityLogs()
擷取的安全性記錄不會包含這些 ID。
安全性記錄
安全性記錄功能會為每個 SecurityEvent
指派記錄層級。如要取得記錄層級,請呼叫 getLogLevel()
。這個方法會傳回記錄層級值,可能的值如下:LEVEL_INFO
、LEVEL_WARNING
或 LEVEL_ERROR
。
Android 9 會將下表中列出的事件記錄到安全性記錄中。如要查看事件代碼,請呼叫 getTag()
。如要擷取事件資料,請呼叫 getData()
。
工作資料夾螢幕鎖定驗證
從 Android 9 開始,設定檔擁有者可以要求使用者透過 DISALLOW_UNIFIED_PASSWORD
使用者限制,為工作資料夾另外設定螢幕鎖定驗證方式。如要檢查使用者是否已為裝置和工作資料夾設定相同的螢幕鎖定驗證方式,請呼叫 DevicePolicyManager.isUsingUnifiedPassword()
。
如果裝置設有獨立的工作資料夾螢幕鎖定,DevicePolicyManager.setMaximumTimeToLock()
只會為工作資料夾設定螢幕鎖定逾時,無法設定整個裝置。
開發人員工具存取權
為協助將工作資料保留在工作資料夾中,Android Debug Bridge (ADB) 工具無法存取工作資料夾中的目錄和檔案。
支援更多生物特徵辨識選項
Android 9 可讓您在工作資料夾的螢幕鎖定畫面中,進一步控管生物特徵辨識硬體驗證作業。使用 KEYGUARD_DISABLE_FACE
和 KEYGUARD_DISABLE_IRIS
呼叫現有的 DevicePolicyManager.setKeyguardDisabledFeatures()
方法。如要停用裝置提供的所有生物特徵辨識驗證方法,請新增 KEYGUARD_DISABLE_BIOMETRICS
。
裝置管理員政策即將淘汰
Android 9 會透過裝置管理,將下列政策標示為已淘汰的 DPC。這些政策會繼續在 Android 9 中正常運作。從 Android 10 版本開始,相同政策會在裝置管理員叫用時擲回 SecurityException。
USES_POLICY_DISABLE_CAMERA
USES_POLICY_DISABLE_KEYGUARD_FEATURES
USES_POLICY_EXPIRE_PASSWORD
USES_POLICY_LIMIT_PASSWORD
有些應用程式會使用裝置管理員進行消費者裝置的管理作業。例如,鎖定遺失的裝置並抹除。仍可以使用下列政策來啟用這項功能:
如要進一步瞭解這些變更,請參閱淘汰裝置管理員。
簡化 QR code 註冊流程
內建 QR code 資料庫
Android 9 隨附 QR 程式庫,可簡化 QR code 裝置佈建作業。IT 管理員不再需要手動輸入 Wi-Fi 詳細資料來設定裝置。不過,Android 9 可以在 QR code 中加入這些 Wi-Fi 詳細資料。當 IT 管理員使用公司擁有的裝置掃描 QR code 時,裝置會自動連上 Wi-Fi 並進入佈建程序,而不需手動輸入任何內容。
QR 代碼佈建方法支援下列佈建額外項目,用於指定 Wi-Fi 詳細資料:
EXTRA_PROVISIONING_WIFI_HIDDEN
EXTRA_PROVISIONING_WIFI_PAC_URL
EXTRA_PROVISIONING_WIFI_PASSWORD
EXTRA_PROVISIONING_WIFI_PROXY_BYPASS
EXTRA_PROVISIONING_WIFI_PROXY_HOST
EXTRA_PROVISIONING_WIFI_PROXY_PORT
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
EXTRA_PROVISIONING_WIFI_SSID
使用佈建額外項目設定日期和時區
QR 代碼佈建方法支援佈建額外項目,以設定裝置上的時間和時區:
清除資料選項
裝置管理員在移除工作資料夾或次要使用者時,可以向使用者顯示個人化訊息。此訊息可協助裝置使用者瞭解 IT 管理員已移除工作資料夾或次要使用者。呼叫 wipeData(int, CharSequence)
並提供簡短的說明訊息。當系統由主要使用者或裝置擁有者呼叫時,系統不會顯示訊息,並開始將裝置恢復原廠設定。
如要從內嵌的 eUICC SIM 卡移除訂閱資料,請呼叫 wipeData()
,並在 flags
引數中加入 WIPE_EUICC
。
關聯商家檔案擁有者的方法
下列方法可供關聯個人資料擁有者使用:
DevicePolicyManager.setKeyguardDisabled()
DevicePolicyManager.setStatusBarDisabled()
PackageInstaller.createSession()