Android 9 的企業應用程式功能

本頁概要列出 Android 9 所提供的企業 API、功能和行為變更。

工作資料夾使用者介面

Android 9 (API 級別 28) 在預設啟動器中加入了使用者介面變更,協助使用者分隔個人應用程式與工作應用程式。支援這項功能的裝置製造商可能會在不同的工作和個人分頁中顯示使用者的應用程式。此外,在啟動器的工作分頁中加入切換鈕,裝置使用者也能更輕鬆地開啟或關閉工作資料夾。

圖 1. 預設啟動器的個人分頁和工作分頁,包含工作資料夾切換按鈕

佈建工作資料夾和受管理的裝置時,Android 9 會提供動畫插圖,協助裝置使用者瞭解這些功能。

在不同設定檔中切換應用程式

Android 9 提供的 API 可透過不同設定檔啟動另一個應用程式的執行個體,協助使用者切換帳戶。例如,電子郵件應用程式可提供 UI 讓使用者切換個人資料夾和工作資料夾,以便存取兩個電子郵件帳戶。所有應用程式都能呼叫這些 API,以啟動相同應用程式的主要活動 (如果已安裝於其他設定檔中)。如要將跨設定檔帳戶切換加入應用程式,請按照下列步驟呼叫 CrossProfileApps 類別的方法:

  1. 呼叫 getTargetUserProfiles() 取得可用於啟動另一個應用程式執行個體的設定檔清單。這個方法會檢查應用程式是否已安裝在設定檔中。
  2. 呼叫 getProfileSwitchingIconDrawable() 以取得用於代表其他設定檔的圖示。
  3. 呼叫 getProfileSwitchingLabel() 以取得提示使用者切換設定檔的本地化文字。
  4. 呼叫 startMainActivity() 以在其他設定檔中啟動應用程式的執行個體。

請在應用程式的資訊清單檔案中,確認您要啟動的主要活動已宣告 ACTION_MAIN 意圖動作,並納入 CATEGORY_LAUNCHER 意圖類別。

透過程式輔助方式開啟或關閉工作資料夾

預設啟動器 (或具有 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(),將應用程式從鎖定工作模式的許可清單中移除。

啟用系統 UI 功能

啟用鎖定工作模式後,裝置擁有者和設定檔擁有者只要呼叫 DevicePolicyManager.setLockTaskFeatures(),並傳遞下列功能旗標的位元欄位,就能在裝置上啟用特定系統 UI 功能:

啟用鎖定工作模式時,您可以呼叫 DevicePolicyManager.getLockTaskFeatures() 來取得裝置的可用功能清單。當裝置結束鎖定工作模式時,會返回其他裝置政策要求的狀態。

隱藏錯誤對話方塊

在某些環境中,例如顯示零售示範或公開資訊的環境中,您可能不會想要向使用者顯示錯誤對話方塊。裝置政策控制器 (DPC) 可以新增 DISALLOW_SYSTEM_ERROR_DIALOGS 使用者限制,針對當機或無回應的應用程式隱藏系統錯誤對話方塊。此限制會影響裝置擁有者套用的所有對話方塊,但只有在設定檔擁有者套用限制時,只有主要或次要使用者中顯示的錯誤對話方塊會遭到封鎖。這項限制不會影響工作資料夾。

在 Android 9 中,以沉浸式全螢幕模式執行的應用程式在鎖定任務模式下不會顯示提醒泡泡。提醒泡泡是使用者 (首次啟動時) 顯示的面板,說明如何退出沉浸模式。

支援多位使用者使用專屬裝置

Android 9 導入專用裝置 (原稱 COSU 裝置) 的「臨時使用者」概念。臨時使用者屬於短期使用者,適用於多位使用者共用單一專用裝置的情況。這包括圖書館或餐旅服務資訊站等裝置上的公開使用者工作階段,以及一組固定使用者 (例如輪班人員) 間的永久工作階段。

暫時使用者應在背景建立。這類執行個體是在裝置上建立為次要使用者,並在資料停止、切換或重新啟動裝置時移除 (連同相關聯的應用程式和資料)。如要建立臨時使用者,裝置擁有者可以執行下列操作:

  1. 在呼叫 DevicePolicyManager.createAndManageUser() 時設定 MAKE_USER_EPHEMERAL 旗標。
  2. 呼叫 DevicePolicyManager.startUserInBackground(),在背景啟動臨時使用者。

請注意,指定 Android 9 的應用程式在呼叫 createAndManageUser() 時,應擷取 UserManager.UserOperationException。呼叫例外狀況的 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 類別中的下列方法,在裝置上設定 APN:

設定時間和時區

裝置擁有者可在 DevicePolicyManager 類別中使用以下方法,設定裝置上的時間和時區:

對重要設定強制執行使用者限制

Android 9 新增了使用者限制,用於停用系統功能和設定。如要新增限制,請使用下列其中一個 UserManager 常數呼叫 DevicePolicyManager.addUserRestriction()

如果裝置強制執行 DISALLOW_CONFIG_BRIGHTNESSDISALLOW_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() 來擷取這項資料。

轉移受管理裝置或工作資料夾擁有權的步驟相同:

  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 天,以便凍結在這些裝置上執行的 OS 版本,例如節慶期間。在任何定義的凍結期間,系統都會強制執行 60 天的必要緩衝區,防止裝置無限期凍結。

凍結期間:

  • 裝置不會收到任何有關 OTA 更新的通知。
  • 裝置不會為 OS 安裝任何 OTA 更新。
  • 裝置使用者無法在「設定」中手動檢查 OTA 更新。

如要設定凍結期間,請呼叫 SystemUpdatePolicy.setFreezePeriods()。由於凍結期間每年都會重複,因此期間的開始與結束日期會以整數呈現,計算從年度開始起算的天數。開始日期必須在前一個凍結期間結束後的至少 60 天。裝置擁有者可呼叫 SystemUpdatePolicy.getFreezePeriods(),取得先前在系統更新政策物件中設定的凍結期間清單。DevicePolicyManager.getSystemUpdatePolicy() 已更新,可傳回裝置擁有者設定的任何凍結期間。

限制工作資料夾的共用權限

設定檔擁有者可以新增使用者限制 DISALLOW_SHARE_INTO_MANAGED_PROFILE,防止使用者將個人資料分享到裝置上的工作資料夾。這項限制禁止下列意圖處理和共用情況:

  • 個人資料夾應用程式會透過工作資料夾應用程式分享資料和檔案。
  • 工作資料夾應用程式會從個人資料夾中挑選項目,例如相片或檔案。

設定這項限制後,DPC 仍可呼叫 addCrossProfileIntentFilter() 來允許跨設定檔活動意圖。

硬體安全金鑰和機器憑證

Android 9 新增的 API 可協助您使用可結合用於安全識別裝置的金鑰和憑證。在設定檔擁有者或裝置擁有者模式下執行的 DPC 可完成以下工作:委派憑證安裝程式

藉由結合這些 API,企業即可在提供存取權前,安全地識別裝置並確認完整性:

  1. Android 裝置會在安全硬體中產生新的私密金鑰。私密金鑰絕不會離開安全硬體,因此絕不會外洩。
  2. 裝置會使用金鑰建立憑證簽署要求 (CSR),並傳送至伺服器。客戶服務代表含有裝置 ID 的認證記錄。
  3. 伺服器會驗證憑證鏈結 (已啟用 Google 憑證),並從認證記錄中擷取裝置中繼資料。
  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 Debug Bridge (ADB) 工具無法存取工作資料夾中的目錄和檔案。

支援更多生物特徵辨識選項

Android 9 可讓您在工作資料夾的螢幕鎖定畫面中,進一步控管生物特徵辨識硬體驗證作業。使用 KEYGUARD_DISABLE_FACEKEYGUARD_DISABLE_IRIS 呼叫現有的 DevicePolicyManager.setKeyguardDisabledFeatures() 方法。如要停用裝置提供的所有生物特徵辨識驗證方法,請新增 KEYGUARD_DISABLE_BIOMETRICS

裝置管理員政策即將淘汰

Android 9 會透過裝置管理,將下列政策標示為已淘汰的 DPC。這些政策會繼續在 Android 9 中正常運作。從 Android 10 版本開始,相同政策會在裝置管理員叫用時擲回 SecurityException。

有些應用程式會使用裝置管理員進行消費者裝置的管理作業。例如,鎖定遺失的裝置並抹除。仍可以使用下列政策來啟用這項功能:

如要進一步瞭解這些變更,請參閱淘汰裝置管理員

簡化 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 詳細資料:

使用佈建額外項目設定日期和時區

QR 代碼佈建方法支援佈建額外項目,以設定裝置上的時間和時區:

清除資料選項

裝置管理員在移除工作資料夾或次要使用者時,可以向使用者顯示個人化訊息。此訊息可協助裝置使用者瞭解 IT 管理員已移除工作資料夾或次要使用者。呼叫 wipeData(int, CharSequence) 並提供簡短的說明訊息。當系統由主要使用者或裝置擁有者呼叫時,系統不會顯示訊息,並開始將裝置恢復原廠設定。

如要從內嵌的 eUICC SIM 卡移除訂閱資料,請呼叫 wipeData(),並在 flags 引數中加入 WIPE_EUICC

關聯商家檔案擁有者的方法

下列方法可供關聯個人資料擁有者使用: