更新日: 2017-12-14 (木) 16:01:40 (131d)

:Android

Android N (7.0)以降から、ダイレクトブートという仕組みが取り入れられました。
普通に電源をつけた起動と、ユーザーが起動後ロックを外す時点が変わります。

Android公式 ダイレクトブートのサポート

開発者視点、何が困るかっていうと、今までインテントフィルタで

<action android:name="android.intent.action.BOOT_COMPLETED" />

を検知していればよかったのですが、Android N (7.0)以降からはただ単に起動した場合は、BOOT_COMPLETEDを検知できません。(>_<)

<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />

というのを検知する必要があります。

ユーザーがロックを解除してから動作して十分なアプリならいいんですが、例えば目覚まし時計や、メッセージング的なアプリだとユーザーがロックを外す前に動作する必要がありますよね。

なので、LOCKED_BOOT_COMPLETEDを検知する必要があります。

AndroidManifest.xmlは次のようにします。

<receiver android:name=".receivers.BootReceiver"
           android:exported="false"
           android:directBootAware="true">
  <intent-filter>
     <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
     <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

下記もわすれずにつけましょう!

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

そして、この起動検知でわかりにくい部分は下記のストレージのことだと思います。(´・ω・)
それを書きたいがために、これを書いたようなものです。

それは、

Android公式 ダイレクトブートのサポート

のページにありますが、この仕組みのために、「認証情報暗号化ストレージ」と「端末暗号化ストレージ」という仕組みができました。
名称、わかりにくっ!!
今までの、普通に使っていたプリファレンスファイルなどが「認証情報暗号化ストレージ」です。
「端末暗号化ストレージ」が新しくできた仕組みですが、これはダイレクトブートのために、できたんですかね??

「認証情報暗号化ストレージ」はユーザーがロックを外してからアクセスできるストレージです。
「端末暗号化ストレージ」はユーザーがロックを外さないでもアプリがアクセスできるストレージです。

なので、ダイレクトブートで使う情報を格納しておくには、「端末暗号化ストレージ」に保存しないといけません。
「認証情報暗号化ストレージ」のほうが、ユーザーがロックを外してからアクセスできる場所なので、秘匿性の高い情報はこちらに格納しましょう。

情報の保存の仕方や、従来のプリファレンスファイルからの移動は長くなるので、下記のGoogleさんが配布しているサンプルコードを見たほうがいいでしょう。

Android DirectBoot Sample

端末暗号化ストレージに保存したpreferenceファイルを見る


選択肢 投票
役に立った 0  
役に立たなかった 0  
どちらでもない 0  
このページが参照された数
Total: 500, 今日: 1, 昨日: 2

でじうぃきは神奈川県横浜市の位置情報システム・スマホアプリ開発の株式会社オンラインコンサルタントが運営しています。
投稿
トップ   このページを編集する 再編集不可にする 差分 バックアップ 添付 複製 名前変更 リロード   新しいページを作る 一覧 検索する 最新の更新   ヘルプ   最終更新のRSS
Last-modified: 2017-12-14 (木) 16:01:40 (131d)