本頁概略說明 Android 8.0 (API 級別 26) 中導入的新版 API、功能和行為變更,會對企業中的 Android 造成影響。
新的 API 與功能
我們讓設定檔擁有者和裝置擁有者管理模式變得更強大、更豐富,且更易於佈建。我們也啟用全新的部署情境,即全代管裝置上的工作資料夾。我們會在以下各節中說明上述和其他功能。
完全受管理裝置上的工作資料夾
在 Android 8.0 中,全代管裝置也能設定工作資料夾。這樣企業就能區隔應用程式和政策,同時保有兩個設定檔的控制權和瀏覽權限。現有的裝置擁有者或其他裝置政策控制器 (DPC) 都可以建立受管理的設定檔。
全代管裝置中的工作資料夾可讓裝置擁有者執行下列操作:
- 呼叫
EXTRA_PROVISIONING_SKIP_USER_CONSENT
,即可在使用者不進行互動的情況下建立受管理的設定檔。 - 在次要使用者或受管理的設定檔建立或移除時接收通知。回呼為
onUserAdded()
和onUserRemoved()
。 - 防止其他 DPC 使用
DISALLOW_ADD_MANAGED_PROFILE
建立受管理的設定檔。如果裝置擁有者是新佈建的裝置,或是升級至 Android 8.0 的裝置,Android 8.0 中的裝置擁有者將預設為此設定。 - 裝置擁有者也可以禁止使用者使用
DISALLOW_REMOVE_MANAGED_PROFILE
移除現有的受管理設定檔。
如果裝置擁有者和設定檔擁有者來自同一個 APK,而且擁有者與擁有者相關聯,裝置擁有者和設定檔擁有者即可彼此通訊 (請參閱下方的「使用者關聯」一節)。
如要進一步瞭解如何支援這個新的部署情境,請參閱全代管裝置上的工作資料夾專屬頁面。
使用者關聯
裝置擁有者和設定檔擁有者代表同一個機構時:
裝置和設定檔擁有者可以在同一個 APK 中彼此通訊,因此可能會想要共用政策或狀態 (請參閱上方「全代管裝置上的工作資料夾」一節)。
關聯使用者適用的裝置功能,例如記錄或加入許可清單的工作模式。
附加至設定檔或使用者的聯盟 ID,用於識別機構。一旦關聯 ID 相符,使用者就會成為關聯。裝置擁有者和設定檔擁有者會使用 setAffiliationIds() 設定其聯盟 ID。代表使用長又不易猜中的字串 ID 的機構。
新增關聯使用者的存取權
如果裝置上所有次要使用者和設定檔都與裝置擁有者建立關聯,您就可以使用下列功能:
- 使用
setSecurityLoggingEnabled()
進行安全性記錄。 - 使用
setNetworkLoggingEnabled()
記錄網路活動記錄。 - 使用
requestBugreport()
回報錯誤。
安全性記錄和錯誤報告先前僅適用於單一使用者裝置或只有一個設定檔和一位使用者的裝置。
透過 setLockTaskPackages()
與裝置擁有者建立關聯時,次要使用者和受管理的設定檔皆可使用鎖定任務模式。如要進一步瞭解使用者關聯,請參閱「關聯使用者」。
自訂佈建免責事項
DPC 現在可以在佈建期間向使用者顯示自身的免責事項。使用 EXTRA_PROVISIONING_DISCLAIMERS
、EXTRA_PROVISIONING_DISCLAIMER_HEADER
和 EXTRA_PROVISIONING_DISCLAIMER_CONTENT
提供樣式化的文字免責事項。DPC 的自訂免責事項會顯示在可收合的條款清單中。
安全性
設定檔擁有者和裝置擁有者可以使用 setRequiredStrongAuthTimeout()
設定逾時期限,用於解鎖裝置或採用次要驗證方法 (例如指紋或信任的代理程式) 的設定檔。逾時期間結束後,使用者必須透過高強度驗證方法 (例如密碼、PIN 碼或解鎖圖案) 解鎖裝置或設定檔。
裝置擁有者和設定檔擁有者可以使用 resetPasswordWithToken()
,安全地重設裝置和工作資料夾密碼。如果是支援檔案型加密功能的裝置,在使用者解鎖裝置或設定檔前,就可以使用這個 API (前提是 DPC 可感知加密)。
在支援檔案式加密功能的裝置上鎖定工作資料夾時,lockNow(int)
可選擇使用 FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY
撤銷工作資料夾的主要加密金鑰。如果使用者關閉工作資料夾,系統也會撤銷加密金鑰。
此外,裝置擁有者可以使用 setNetworkLoggingEnabled()
開啟 DNS 查詢的網路記錄功能,以及從公司擁有的裝置發起的 TCP 連線。詳情請參閱網路活動記錄。
設定檔擁有者可限制哪些主要使用者的套件能觀察工作資料夾通知。呼叫 setPermittedCrossProfileNotificationListeners()
以設定透過 NotificationListenerService
接收事件的許可清單套件。如果將允許的事件監聽器設為 null
(預設值),系統會停用許可清單,所有套件都可以監聽通知。如要將事件限制為系統套件,請傳遞空白集合。如要查看無法存取工作資料夾通知的應用程式,使用者可以依序輕觸「設定」>「應用程式和通知」>「特殊應用程式存取權」>「通知存取權」。
最後,設定檔擁有者和裝置擁有者可使用 getPendingSystemUpdate()
擷取裝置上可用的系統更新相關資訊。
App Management API 委派
API 委派功能可讓裝置擁有者和設定檔擁有者將應用程式管理作業完全卸載至其他應用程式。DevicePolicyManager
類別提供方法,用於管理裝置和設定檔擁有者可為套件授予的委派範圍:
setDelegatedScopes()
方法可讓裝置擁有者和設定檔擁有者將特定權限 API 的存取權授予其他應用程式。getDelegatedScopes()
方法會傳回授予套件的範圍。getDelegatePackages()
會傳回具有範圍的套件。
下表顯示 DevicePolicyManager
中的各種方法如何整理成不同的範圍:
長時間執行的背景服務
裝置和設定檔擁有者可將 DeviceAdminService
設為子類別,藉此建立背景服務。Android 系統會嘗試在使用者執行期間讓服務保持運作。如要執行週期性工作,請考慮先使用 JobScheduler
再建立背景服務。
控管備份服務
裝置擁有者可以使用 DevicePolicyManager
中的新方法切換 Android Backup Service。使用 setBackupServiceEnabled()
啟用及停用備份服務。使用 isBackupServiceEnabled()
檢查備份服務狀態。
Wi-Fi Proxy 設定
裝置擁有者和設定檔擁有者可針對 Wi-Fi 網路設定 HTTP Proxy 伺服器。使用 PAC 檔案或手動設定,為每個 Wi-Fi 網路設定 Proxy 伺服器。如要設定或移除 WifiConfiguration
的 Proxy,請呼叫其 setHttpProxy()
方法。如要取得 Proxy 設定,請呼叫 getHttpProxy()
。
管理員停用功能的說明對話方塊
應用程式應向嘗試管理員停用功能的使用者顯示實用的說明。所有應用程式現在都可以使用 createAdminSupportIntent()
建立意圖,在傳遞至 startActivity(Intent)
時顯示說明對話方塊。意圖包括針對已停用相機的自訂本地化說明、停用螢幕畫面擷取功能,以及所有 UserManager
限制。
限制藍牙
裝置擁有者可以停用藍牙,進而影響裝置上的所有使用者和設定檔。如要關閉藍牙,請新增使用者限制 DISALLOW_BLUETOOTH
。
裝置擁有者和設定檔擁有者可以禁止使用者使用 DISALLOW_BLUETOOTH_SHARING
透過藍牙傳送檔案。接收檔案不會受到影響。由裝置擁有者設定後,DISALLOW_BLUETOOTH_SHARING
就會套用至裝置上的所有使用者。在升級至 Android 8.0 的裝置上,新設定檔和現有設定檔在 Android 8.0 中預設為這項設定。
行為變更
如果您要建構適用於企業的應用程式 (包括 DPC),應查看 Android 8.0 中的下列行為變更,並據此修改應用程式。
移除使用者
即使 DISALLOW_REMOVE_USER
已啟用,裝置擁有者仍可使用 removeUser()
移除次要使用者和受管理的設定檔。
安全性
驗證
下列變更已經在 DevicePolicyManager
類別中生效:
- 只有在單獨的工作驗證為啟用時,
lockNow()
方法才會鎖定工作資料夾。 - 擔任裝置擁有者或設定檔擁有者且指定 Android 8.0 的 DPC 無法再使用
resetPassword()
方法。呼叫後,系統會擲回安全性例外狀況。反之,DPC 應使用resetPasswordWithToken()
。注意: 指定 Android 7.1.1 (API 級別 25) 以下版本的 DPC,以及只具備裝置管理員權限的 DPC,則不受這項異動影響。
- 如果裝置支援檔案型加密功能,則使用者在重新啟動後首次解鎖裝置前,無法使用
isActivePasswordSufficient()
。如果使用者在解鎖裝置前呼叫,系統會擲回例外狀況。
已鎖定工作資料夾的資料
Android 8.0 內含使用者介面變更,可將資料與鎖定的工作資料夾分隔開來。
- 工作資料夾中的應用程式通知現在可能會隱藏其內容。 先前,通知導覽匣會顯示已鎖定工作資料夾的工作應用程式內容。
- 「Recents」畫面現在會顯示純面板,用於從已鎖定的工作資料夾執行應用程式。以彩色鍵顯示的面板包含應用程式的圖示和名稱。先前在鎖定工作資料夾中的活動或工作,會顯示在「最近使用」畫面中的預覽畫面。
裝置完整性
ENSURE_VERIFY_APPS
旗標現在為全域使用者限制。如果裝置上有任何使用者設有此限制,系統就會對裝置上的所有使用者強制執行應用程式驗證。舉例來說,如果資料夾擁有者為工作資料夾設定限制,系統就會針對該使用者的個人資料夾強制執行應用程式驗證。- 除了裝置擁有者之外,系統現在還會為設定檔擁有者叫用
onSystemUpdatePending()
方法。 - 使用
SystemUpdatePolicy
類別時,事後政策不再適用於安全性修補程式,因此安全性修補程式無法再延後。但其他政策類型的行為 (例如自動設定和固定時段) 則不受影響。 - 裝置擁有者可以使用
wipeData()
觸發恢復原廠設定作業,即使DISALLOW_FACTORY_RESET
已啟用也一樣。
永久連線的 VPN
Android 8.0 包含使用者介面變更,可協助使用者瞭解永久連線的 VPN 連線狀態:
- 當永久連線的 VPN 連線中斷或無法連線時,使用者會看到無法關閉的通知。輕觸通知即可查看 VPN 設定。當 VPN 重新連線或使用者關閉永久連線的 VPN 選項時,通知會消失。
- 永久連線 VPN 可讓使用裝置的使用者封鎖任何未使用 VPN 的網路連線。啟用此選項後,「設定」應用程式會警告使用者,直到 VPN 連線後才會連上網際網路。設定會提示使用者繼續操作或取消。
現在 VPN 應用程式的 VpnService
必須在啟動後呼叫 startForeground()
方法。由於 Android 系統會直接啟動 VPN 應用程式的服務,因此應用程式的責任是轉換至前景。Android 8.0 會關閉不會將 VPN 服務轉換至前景的 VPN 應用程式。
密碼回呼
DeviceAdminReceiver
的密碼變更回呼現在包含 user
參數,可用於識別密碼所屬的使用者或設定檔。新的方法簽章如下:
onPasswordChanged(Context, Intent, UserHandle)
onPasswordExpiring(Context, Intent, UserHandle)
onPasswordFailed(Context, Intent, UserHandle)
onPasswordSucceeded(Context, Intent, UserHandle)
每個新方法的預設實作方式都會呼叫舊版,捨棄使用者引數。Android 8.0 淘汰了先前的方法。
App Management API 委派
DevicePolicyManager
類別中的下列方法現已淘汰:
setCertInstallerPackage()
getCertInstallerPackage()
setApplicationRestrictionsManagingPackage()
getApplicationRestrictionsManagingPackage()
此外,您現在可以將單一範圍委派給多個套件。換句話說,裝置擁有者和設定檔擁有者可為同一組 API 授予兩個不同套件的存取權。