アプリケーションをアップデートした時にメッセージを出す


初回起動時に1度だけダイアログを出す方法ではアプリケーションの初回起動時にダイアログを出す方法を紹介しました。

今回は、アプリケーションをアップデートした時に処理を行う方法を紹介します。
アップデートした際のリリースノートの表示や、新規Helpの表示などに活用出来ることと思います。

アップデートの際に処理を行う事は、TechBoosterで過去に取り扱っている、以下記事を組み合わせることで実現できます。

詳細は続きからどうぞ。

アプリケーションがアップデートした時に処理を行う為に、以下手順を踏みます。

  1. アプリケーションのバージョン情報を取得する
  2. バージョン情報をSharedPreferenceで管理する
  3. 管理されているバージョン情報(旧)と、最新のPackageのバージョン情報を比較する

これらのテクニックはそれぞれ、上記に挙げたリンク先で紹介されています。
不明点があれば、そちらも参考にしてみてください。

1.バージョン情報を取得し、SharedPreferenceで管理する

まずは、バージョン情報を取得する処理です。
SharedPreferenceに対し、保持しているバージョン情報(旧)を要求。
その後、最新のバージョン情報を取得しています。

//SharedPreferenceの設定
		SharedPreferences sp = PreferenceManager
				.getDefaultSharedPreferences(this);
		SharedPreferences.Editor editor = sp.edit();
		int vCode = sp.getInt("VersionCode", 1);
		String vName = sp.getString("VersionName", "1.0");

		//最新のバージョン情報を取得する
                PackageInfo pi = null;
		try {
			pi = getPackageManager().getPackageInfo(getPackageName(),
					PackageManager.GET_META_DATA);
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}

		//最新のバージョン情報をPreferenceに保存
		editor.putInt("VersionCode",pi.versionCode);
		editor.putString("VersionName",pi.versionName);
		editor.commit();

2.最新のバージョンと比較し、アップデートを検知する

AndroidMarketでは、アプリケーションのバージョンアップの際には必ずVersionCodeを変更する必要があります。
その点に着目し、管理している(Preferenceに保存している旧)VersionCode/VersionNameと最新の差異を比較しています。

下記ソースコード内、Toastを表示させている箇所がアップデート時に処理を行っている箇所となります。

		if (pi != null) {
			// VersionCode でVersionUPを判断する
			if (pi.versionCode > vCode) {
                        //VersionCodeが上がっている場合
				Toast.makeText(this, "Version Up @VersionCode Change to"+Integer.toString(pi.versionCode),
						Toast.LENGTH_LONG).show();
			}
                        // VersionName でVersionUPを判断する
			if (!pi.versionName.equals(vName)) {
                        //VersionNameが異なる場合
				Toast.makeText(this, "Version Up @VersionName Change to "+pi.versionName,
						Toast.LENGTH_LONG).show();
			}
		}
「保存しているバージョンコードと現在のアプリのバージョンコードが異なっていたらアップデートされたってことだね!
アップデートされたって判断したら必要な処理の実施と現在のバージョンコードの保存をしておくんだ。これで次のアップデートまで処理は行われないよね!」
2 Comments