サンプルコードでは、SharedPreferencesを使い、初回起動を判定します。初回であればダイアログを表示、2度目以降であれば非表示にする等、表示処理を切り替えています。「はじめに」や「利用規約」、「簡単な使い方の説明」など頻繁に見せる必要は無いが、必ず目を通してほしい項目の表示に有効でしょう。
ダイアログ表示以外にも特定のActivityを表示するなどUIを変更したり、データ保存方法をアプリケーションの実装にあわせてSharedPreferences以外を選択したり、応用を考えてみてください。
本記事を読む前に以下内容について確認しておくとスムーズです。
ソースコードは続きから。
起動時の状態保存、初回ダイアログ、起動状態のクリアの3つのステップにわけて解説します。
起動状態の保存
public static final int PREFERENCE_INIT = 0;
public static final int PREFERENCE_BOOTED = 1;
//データ保存
private void setState(int state) {
// SharedPreferences設定を保存
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().putInt("InitState", state).commit();
//ログ表示
output( String.valueOf(state) );
}
//データ読み出し
private int getState() {
// 読み込み
int state;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
state = sp.getInt("InitState", PREFERENCE_INIT);
//ログ表示
output( String.valueOf(state) );
return state;
}
//データ表示
private void output(String string){
TextView tv = (TextView) findViewById(R.id.TextView);
tv.setText("Preference: InitState is " + string);
}
setState関数でSharedPreferencesに状態(InitState)を保存します。設定値はPREFERENCE_INIT or PREFERENCE_BOOTEDです。
getState関数ではSharedPreferences#getIntメソッドを利用してInitStateを取得します。第2引数は未保存状態など、取得できなかった場合の初期値です。
デバッグ用にoutput関数を用意しました。TextViewに現在のInitStateを表示し、動作を確認します。
Preference: InitState is [1 or 0]
上記のように、Activity上に現在の状態を表示します。
関連:データを簡単に保存する方法(Preference編)
初回のみダイアログを表示する
//ダイアログ表示
@Override
public void onResume(){
super.onResume();
AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);
// ダイアログの設定
alertDialog.setTitle("FirstBoot"); //タイトル
alertDialog.setMessage("初回メッセージ"); //内容
alertDialog.setIcon(R.drawable.icon); //アイコン設定
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//初回表示完了
setState(PREFERENCE_BOOTED);
}
});
// ダイアログの作成と表示
if(PREFERENCE_INIT == getState() ){
//初回起動時のみ表示する
alertDialog.create();
alertDialog.show();
}
}
17行目:ダイアログのOKボタンを押下した場合のみ、SharedPreferencesのInitStateに初回起動完了(PREFERENCE_BOOTED)を設定します。
22行目:現在の状態に応じて(初回起動のPREFERENCE_INIT時のみ)ダイアログを生成/表示します。
Activity#onResumeでダイアログ表示を実装するのはAndroidアプリケーションのライフサイクルに関係するんだ。アプリの切り替え時など、onCreateメソッドを経由しないケースをフォローしているよ。 ライフサイクルは図解Androidのライフサイクルとプラットフォームで確認してね。 |
起動状態をクリアする
「初回起動時にしか表示されない」という実装はデバッグが難しくなるため、デバッグ用に起動状態(InitState)をクリアするためのOptionメニューを追加します。
public static final int MENU_SELECT_CLEAR = 0;
//メニュー作成
public boolean onCreateOptionsMenu(Menu menu){
//Clearボタンの追加
menu.add(0, MENU_SELECT_CLEAR, 0, "Clear")
.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return true;
}
//メニュー実行時の処理
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_SELECT_CLEAR:
//状態を忘れる
setState(PREFERENCE_INIT);
return true;
}
return false;
}
onCreateOptionsMenuメソッドでオプションメニューのクリアボタン(状態を初期化する)を追加します
17行目:onOptionsItemSelectedメソッドはメニューが選択された場合の処理です。起動状態を初期化します