1. 程式人生 > >Android7.0 之 直接啟動

Android7.0 之 直接啟動

搬運工......

當裝置已開機但使用者尚未解鎖裝置時,Android N 將在安全的“直接啟動”模式下執行。為支援此操作,系統為資料提供兩個儲存位置:

  • 憑據加密儲存,這是預設儲存位置,僅在使用者解鎖裝置後可用。
  • 裝置加密儲存,該儲存位置在“直接啟動”模式下和使用者解鎖裝置後均可使用。

預設情況下,應用不會在“直接啟動”模式下執行。如果您的應用需要在“直接啟動”模式下進行操作,您可以註冊在此模式期間應執行的應用元件。 對於需要在“直接啟動”模式下執行的應用,常見的一些用例包括:

  • 已安排通知的應用,如鬧鐘應用。
  • 提供重要使用者通知的應用,如簡訊應用。
  • 提供無障礙服務的應用,如 Talkback。

如果您的應用在“直接啟動”模式下執行時需要訪問資料,則使用裝置加密儲存。 裝置加密儲存包含使用金鑰加密的資料,僅在裝置已成功執行驗證啟動後金鑰才可用。

對於應使用與使用者憑據(如 PIN 或密碼)關聯的金鑰加密的資料,請使用憑據加密儲存。憑據加密儲存僅在使用者已成功解鎖裝置後可用,直到使用者再次重啟裝置。 如果使用者在解鎖裝置後啟用鎖定螢幕,則不會鎖定憑據加密儲存。

請求在直接啟動時執行

應用必須先向系統註冊其元件,然後才能在“直接啟動”模式下執行或訪問裝置加密儲存。 應用通過將元件標記為“加密感知”來註冊系統。若要將您的元件標記為加密感知,請在清單中將android:directBootAware屬性設為 true。

當裝置重啟後,加密感知元件可以註冊接收來自系統的LOCKED_BOOT_COMPLETED廣播訊息。 此時裝置加密儲存可用,您的元件可以在“直接啟動”模式下執行需要執行的任務,例如觸發已設定的鬧鈴。

以下程式碼段展示如何將註冊為加密感知並在應用清單中為LOCKED_BOOT_COMPLETED新增 Intent 過濾器:

<receiverandroid:directBootAware="true">
  ...
  <intent-filter><actionandroid:name="android.intent.action.LOCKED_BOOT_COMPLETED"/></intent-filter></receiver>

在使用者解鎖裝置後,所有元件均可訪問裝置加密儲存以及憑據加密儲存。

訪問裝置加密儲存

要訪問裝置加密儲存,請通過呼叫Context.createDeviceProtectedStorageContext()

建立另一個例項。使用此上下文執行的所有儲存 API 呼叫均訪問裝置加密儲存。 以下示例訪問裝置加密儲存並開啟現有應用資料檔案:

Context directBootContext = appContext.createDeviceProtectedStorageContext();// Access appDataFilename that lives in device encrypted storageFileInputStream inStream = directBootContext.openFileInput(appDataFilename);// Use inStream to read content...

僅針對在“直接啟動”模式下必須可訪問的資訊使用裝置加密儲存。請勿將裝置加密儲存用作通用加密儲存。對於專有使用者資訊,或在“直接啟動”模式下不需要的加密資料,請使用憑據加密儲存。

接收使用者解鎖通知

重啟後一旦使用者解鎖了裝置,您的應用即可切換至訪問憑據加密儲存,並使用依賴使用者憑據的常規系統服務。

為了在重啟後用戶解鎖裝置時收到通知,請從一個正在執行的元件註冊以偵聽ACTION_USER_UNLOCKED訊息。 或者,您可以接收現有訊息,該訊息現在表明裝置已啟動,且使用者已解鎖裝置。

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

遷移現有資料

如果使用者將其裝置更新為使用“直接啟動”模式,您可能需要將現有資料遷移到裝置加密儲存。 使用Context.moveSharedPreferencesFrom()Context.moveDatabaseFrom()在憑據加密儲存和裝置加密儲存之間遷移首選項和資料庫資料。

請運用您的最佳判斷來決定從憑據加密儲存向裝置加密儲存遷移哪些資料。 您不應將專有使用者資訊(如密碼或許可權令牌)遷移到裝置加密儲存。 。在某些情況下,您可能需要在這兩個加密儲存中管理單獨的資料集。

測試您的加密感知應用

使用新的“直接啟動”模式測試您的加密感知應用。有兩種方式可以啟用直接啟動模式:

注意:啟用“直接啟動”將擦除裝置上的所有使用者資料。

在已安裝 Android N 的受支援的裝置上,通過執行以下操作之一啟用“直接啟動”:

  • 在裝置上,如果您尚未啟用Developer options,則可通過轉到Settings > About phone並點選Build number七次啟用它。 當開發者選項螢幕可用後,轉到Settings > Developer options並選擇Convert to file encryption
  • 使用以下 adb shell 命令啟用“直接啟動”模式:
    $ adb reboot-bootloader
    $ fastboot --wipe-and-use-fbe
    

另外,還提供模擬直接啟動模式,以防您需要在測試裝置上切換模式。 模擬模式應僅在開發期間使用,否則可能導致資料丟失。 若要啟用模擬直接啟動模式,請在裝置上設定鎖定模式,如果在設定鎖定模式時系統提示安全啟動螢幕,則選擇“No thanks”,然後使用以下 adb shell 命令:

$ adb shell sm set-emulate-fbe true

若要關閉模擬直接啟動模式,請使用以下命令:

$ adb shell sm set-emulate-fbe false

使用這些命令會導致裝置重啟。