techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

AppLaunchCheckerを使って初回起動を判断する

Androidアプリを作るにあたって初回起動を判断する必要があると思います。
よくあるケースとしてははじめて起動した時にチュートリアルを表示して、2回目以降はチュートリアルを出さないようにするなどの処理を考えたりするときに判断が必要になります。

一般的にはプリファレンスにデータを書き込んで1回目か2回目以降なのか判断できるようにしたりしますが、この機能を実現するAPIがAndroid Support Libraryに標準で入りましたので紹介したいと思います。

実装

初回起動か2回目以降の起動かを保存するAppLaunchCheckerというのを使って機能を実現します。
AppLaunchCheckerはSupport Library v4に実装されています。
それでは使ってみましょう。

AppLaunchCheckerには2つのメソッドを持っています。
hasStartedFromLauncherとonActivityCreateの2つになります。

hasStartedFromLauncherは過去に起動したことがある場合はtrueを返すメソッドになっています。
onActivityCreateはACTION_MAINでCATEGORY_LAUNCHERの時に起動したことを保存するメソッドになっています。
そのため次の用に実装すると1回目と2回目以降を判断することが簡単にできます。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(AppLaunchChecker.hasStartedFromLauncher(this)){
            Log.d("AppLaunchChecker","2回目以降");
        } else {
            Log.d("AppLaunchChecker","はじめてアプリを起動した");
        }

        AppLaunchChecker.onActivityCreate(this);
    }

AppLaunchChecker.hasStartedFromLauncher(this)で1回目、2回目以降を確認して処理を切り分けています。
あとAppLaunchChecker.onActivityCreate(this);によって起動したことを保存しています。
内部の実装非常に簡単でonActivityCreateを実行した時に引数のActivityからgetIntentしてインテントの情報を収集します。
収集した情報からACTION_MAINでCATEGORY_LAUNCHERということが取れたらSharedPreferenceでandroid.support.AppLaunchChecker.xmlをで作成し、startedFromLauncherのKeyでValueをTrueで保存されます。
保存した結果は次のようになります。
  [android.support.AppLaunchChecker.xml]

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <boolean name="startedFromLauncher" value="true" />
</map>

hasStartedFromLauncherをした時にstartedFromLauncherを値を取り出して確認する仕組みになっています。

サンプルコード

github.com