直接前往內容

最常造訪的網頁

最近瀏覽的網頁

navigation

直接開機

Android N 會在一個安全的 直接開機 模式下執行,這是裝置已經開啟電源但使用者尚未解鎖裝置的期間。 為了支援這種方式,系統為資料提供兩個儲存位置:

根據預設,應用程式不會在「直接開機」模式下執行。如果您的應用程式需要在「直接開機」模式期間執行動作,您可以註冊應該在此模式下執行的應用程式元件。 需要在「直接開機」模式下執行的一些常見應用程式使用案例包括:

如果您的應用程式需要在「直接開機」模式期間存取資料,請使用裝置加密的儲存空間。 裝置加密的儲存空間包含以金鑰加密的資料,這個金錀只有在裝置執行成功的驗證開機之後才能使用。

對於應該使用與使用者認證關聯之金鑰 (例如 PIN 或密碼) 加密的資料,請使用認證加密的儲存空間。認證加密的儲存空間只有在使用者成功解鎖裝置之後到使用者再次重新啟動裝置之間的時間可以使用。 如果使用者在解鎖裝置之後啟用鎖定螢幕,並不會鎖定認證加密的儲存空間。

要求直接開機期間的執行權限

應用程式必須先向系統註冊其元件,這些元件才能在「直接開機」模式期間執行或存取裝置加密的儲存空間。 向系統註冊的應用程式會將元件標記為 加密感知。如果要將元件標記為加密感知,請將宣示說明中的 android:encryptionAware 屬性設定為 true。

當裝置重新啟動時,加密感知元件可以註冊為從系統接收 LOCKED_BOOT_COMPLETED 廣播訊息。 這個時候可以使用裝置加密的儲存空間,而且您的元件可以執行在「直接開機」模式期間需要執行的工作,例如觸發排程的鬧鐘。

下列程式碼片段是一個範例,示範如何在應用程式宣示說明中將 BroadcastReceiver 註冊為加密感知以及如何為 LOCKED_BOOT_COMPLETED 新增意圖篩選器:

<receiever
  android:encryptionAware="true" >
  ...
  <intent-filter>
    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

一旦使用者將裝置解鎖,所有元件都可存取裝置加密的儲存空間與認證加密的儲存空間。

存取裝置加密的儲存空間

如果要存取裝置加密的儲存空間,請透過呼叫 Context.createDeviceEncryptedStorageContext() 以建立第二個 Context 實例。使用此內容建立的所有儲存 API 呼叫都可以存取裝置加密的儲存空間。 下列範例會存取裝置加密的儲存空間並開啟現有的應用程式資料檔案:

Context directBootContext = Context.createDeviceEncryptedStorageContext();
// Access appDataFilename that lives in device encrypted storage
FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
// Use inStream to read content...

只針對必須在「直接開機」模式期間存取的資訊使用裝置加密的儲存空間。不要將裝置加密的儲存空間做為一般用途的加密存放區。對於私密使用者資訊或「直接開機」模式期間不需要的加密資料,請使用認證加密的儲存空間。

接收使用者解鎖的通知

裝置重新啟動之後,一旦使用者將裝置解鎖,您的應用程式就可以切換為存取認證加密的儲存空間,並使用倚賴使用者認證的一般系統服務。

如果要接收裝置重新開機後使用者解鎖裝置的通知,請從執行中元件註冊 BroadcastReceiver 以接聽 ACTION_USER_UNLOCKED 訊息。 或者,您可以接收現有的 ACTION_BOOT_COMPLETED 訊息,它現在可以指出裝置已開機且使用者已解鎖裝置。

您可以透過呼叫 UserManager.isUserUnlocked(),以直接查詢使用者是否已將裝置解鎖。

遷移現有資料

如果使用者更新其裝置來使用「直接開機」模式,您可能有現有的資料必須遷移到裝置加密的儲存空間。 使用 Context.migrateSharedPreferencesFrom()Context.migrateDatabaseFrom(),在認證加密的儲存空間與裝置加密的儲存空間之間遷移偏好設定與資料庫資料。

決定要將哪些資料從認證加密的儲存空間遷移到裝置加密的儲存空間時,請使用最佳判斷。 您不應該將私密使用者資訊 (例如密碼或授權權杖) 遷移到裝置加密的儲存空間。 在某些情況下,您需要在這兩種加密的存放區中管理不同的資料集。

測試您的加密感知應用程式

使用新的「直接開機」模式測試您的加密感知應用程式。您可以透過兩種方式啟用「直接開機」。

注意:啟用「直接開機」會清除裝置上的所有使用者資料。

在已安裝 Android N 的支援裝置上,執行下列其中一個動作來啟用「直接開機」:

另外也提供模擬的「直接開機」模式,如果您需要在測試裝置上切換模式時即可利用。 模擬模式應該只在開發期間使用,而且它可能造成資料遺失。 如果要啟用模擬的「直接開機」模式,請在裝置上設定鎖定模式;設定鎖定模式時如果系統提示您設定安全啟動畫面,請選擇 [No thanks],然後使用下列 adb shell 命令:

$ adb shell sm set-emulate-fbe true

如果要關閉模擬的「直接開機」模式,請使用下列命令:

$ adb shell sm set-emulate-fbe false

使用這些命令會使得裝置重新開機。

本網站使用 Cookie 儲存你在此指定的語言和顯示選項偏好設定。

掌握有關 Android 開發人員的最新消息和實用訣竅,協助你製作最受歡迎的 Google Play 內容。

* 必填欄位

訂閱成功!

在 WeChat 上追蹤 Google Developers

你要以瀏覽這個網站嗎?

你要求以顯示這個網頁,但你為此網站指定的語言偏好設定為

是否要變更語言偏好設定並改用瀏覽網站?稍後如要變更語言偏好設定,請利用位在每個網頁最下方的語言選單來調整設定。

你的 API 層級必須達 以上才能存取這個級別

本說明文件已隱藏,因為你為該文件選取的 API 層級為 。使用左側導覽列上方的選取工具即可變更說明文件的 API 層級。

如需進一步瞭解如何為應用程式指定 API 層級的相關資訊,請參閱 Supporting Different Platform Versions (支援不同的平台版本) (英文)。

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)