第二に、指紋フレームワークの初期化プロセス
システムがオンになると、FingerprintServiceを含むさまざまなサービスが開始されます。次の図のブートログ(sys_log.boot)から確認できます。
05-29 10:37:57.870869 1127 1127 I SystemServiceManager:com.android.server.dreams.DreamManagerServiceを開始しています
05-29 10:37:57.874643 1127 1127 SystemServer:StartAssetAtlasService
05-29 10:37:57.883240 1127 1127 I SystemServiceManager:com.android.server.print.PrintManagerServiceを開始しています
05-29 10:37:57.910104 1127 1127 I SystemServiceManager:com.android.server.restrictions.RestrictionsManagerServiceを開始しています
05-29 10:37:57.913926 1127 1127 I SystemServiceManager:com.android.server.media.MediaSessionServiceを開始しています
05-29 10:37:57.926584 1127 1127 I SystemServer:StartMediaRouterService
05-29 10:37:57.939619 1127 1127 I SystemServiceManager:com.android.server.trust.TrustManagerServiceを開始しています
05-29 10:37:57.952689 1127 1127 I SystemServiceManager:com.android.server.fingerprint.FingerprintServiceを開始しています
05-29 10:37:58.866228 1127 1127 V FingerprintService:Fingerprint HAL id:488345235968
05-29 10:37:58.867305 1127 1127 I SystemServer:StartBackgroundDexOptService
FingerprintServiceの開始は、SystemServer.JavaのstartOtherServiceメソッドにあります。
/ **
*まだリファクタリングされていないものの雑多なバッグを開始します
*整理されています。
* /
private void startOtherServices(){
最終的なコンテキストコンテキスト= mSystemContext;
VibratorService vibrator = null;
IMountService mountService = null;
……
// FingerprintServiceを開始します
if(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)){
mSystemServiceManager.startService(FingerprintService.class);
}
……
ここで開始すると、次に示すように、FingerprintServiceがServiceManagerに追加されます。
FingerprintServiceをServiceManagerに追加した後、SystemServiceRegistry.javaの静的コードブロックにサービスを登録するときに、FingerprintServiceオブジェクトをServiceManagerから取得できます。これにより、FingerprintManagerオブジェクトを構築できるため、アプリはContextを介してFingerprintManagerオブジェクトを取得できます。 。さらに、FingerprintServiceのonStart()メソッドもgetFingerprintDaemon()を呼び出して、次の手順を実行します。
//①指紋を取得
//②フィンガープリントでコールバック関数mDaemonCallbackを登録する
//③openhal関数を呼び出してフィンガープリントを取得
パブリックIFingerprintDaemon getFingerprintDaemon(){
//① GET fingerprintd
mDaemon = IFingerprintDaemon.Stub.asInterface(ServiceManager.getService(
FINGERPRINTD));
mDaemon.asBinder()。linkToDeath(this、0);
//② フィンガープリントでコールバック関数mDaemonCallback を登録する
mDaemon.init(mDaemonCallback);
//③ コールを取得するfingerprintd のopenhal 機能
mHalDeviceId = mDaemon.openHal();
……
}
アプリはコンテキストを介してFingerprintManagerを取得し、FingerprintManagerインターフェースを呼び出して対応する機能を実装します。FingerprintManagerは、FingerprintServiceのメソッドを転送します。FingerprintServiceは、登録全体の管理、指紋の識別、削除、およびプロセスのロジックの確認を行います。 FingerprintHalレイヤーと通信します。