初回起動時、アプリの利用規約を表示したり、チュートリアル画面を表示したい場合があります。
私はこれまで SharedPreferences を使って判定していました。

アプリの初回起動を判定できる機能って無いのかな……
と思っていたところ、AppLaunchChecker クラスなるものを見つけました!
数年前からあったようですね。
AppLaunchCheckerクラスとは?
一言でいうと、アプリの初回起動を判定するためのクラスです。
このクラスのコメントを読んでみましょう。
/**
* This class provides APIs for determining how an app has been launched.
* This can be useful if you want to confirm that a user has launched your
* app through its front door activity from their launcher/home screen, rather
* than just if the app has been opened in the past in order to view a link,
* open a document or perform some other service for other apps on the device.
*/日本語訳:
このクラスは、アプリの起動方法を決定するためのAPIを提供します。
リンクを表示するために過去にアプリを開いた場合だけでなく、ドキュメントを開いた場合よりも、
ユーザーがランチャー/ホーム画面から正面玄関のアクティビティを通じてアプリを起動したことを確認する場合に便利です。
または、デバイス上の他のアプリに対して他のサービスを実行します。

そのままのことが、書いてありますね。
AppLaunchCheckerクラスが持つ機能(メソッド)とは?
以下の2つの機能を持っています。
- hasStartedFromLauncher
- onActivityCreate
hasStartedFromLauncher について
hasStartedFromLauncher のコメントを確認してみます。
Checks if this app has been launched by the user from their launcher or home screen since it was installed.
日本語訳:このアプリがインストールされてから、ユーザーがランチャーまたはホーム画面から起動したかどうかを確認します。
hasStartedFromLauncher を呼び出すと、初回起動かどうかをBoolean(真偽値)で返すようです。
初回起動の場合は「False」、初回起動以外なら「True」を返します。
onActivityCreate について
onActivityCreate のコメントを確認してみます。
Records the parameters of an activity’s launch for later use by the other methods available on this class.
日本語訳:このクラスで使用可能な他のメソッドで後で使用できるように、アクティビティの起動のパラメーターを記録します。
onActivityCreate を呼び出すと、そのタイミングで「初回起動ではない!」というフラグの設定をします。
【まとめ】 AppLaunchCheckerクラスの具体的な使い方
上記で説明したように、2つのメソッドを使って初回起動判定に役立てます。
① 起動時、hasStartedFromLauncher で初回起動状態を取得する
② 初回起動かどうか判定する(if文)
③ onActivityCreate を使って、「初回起動ではない」状態に設定する
主にこの3ステップになると思います!
便利なクラスがあるもんですね〜。
【注意点】 onActivityCreate を呼び出すタイミング
ちなみに、先述にもある通り、「ユーザーがランチャーまたはホーム画面から起動したかどうかを確認します」とあります。
つまり、このメソッドが使えるのは初回起動のActivity内のみなんです!
MainActivity など最初に呼ばれるActivityの「onCreate」で onActivityCreate を呼び出してしまうと、下記のような状態になります。
想定:初回起動時は、利用規約画面を表示する。初回起動以外であれば、トップ画面を表示する。しかし、利用規約のチェックボックスにチェックを入れ、利用規約に同意するボタンを押下していなければ、初回起動と同等に扱う。
動作:利用規約などはチェックボックスに入力してもらう画面でアプリをキルすると、再起動時に初回起動判定がされず、利用規約画面が表示されずトップ画面が表示される。
onActivityCreate を呼び出すタイミングは、利用規約から遷移するタイミングで呼び出すべきですよね。
しかし、このような画面を跨ぐ場合は、AppLaunchCheckerクラスが使えません。
SharedPreferencesを使って実装するのが得策となりますね。
参考


