【Android】【Java】アプリ名、バージョン番号(versionCode)、バージョン名(versionName) などをコードで取得する(PackageManager を利用) 
2018/07/10 Tue [edit]
前回 "app_name" など、リソースからIDを取得→アプリ名取得する方法などを書いたが、PackageManager からもアプリの情報などを取得することができる。ついでなので、バージョン番号(versionCode)、バージョン名(versionName)、ビルドターゲットSDKのバージョン(targetSdkVersion)、最小SDKバージョン(minSdkVersion)なども書いておこう。これらの違いは簡単な解説も書いておくが、以下に資料を載せておくので必要なら確認して欲しい。
(参考)
・Android での API レベルの使用
・minSdkVersionとtargetSdkVersionの関係
■バージョン番号(int 型)を取得する
■バージョン名(String 型)を取得する
■ビルドターゲットSDKバージョン(API Level)を取得する
■最小SDKバージョン(API Level)を取得する
(※) Android Studio 3.1.2 / Galaxy S7 Edge (Android 7.0) / Windows10(x64) で確認
■アプリケーション名を取得する
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
//アプリケーション名を取得する
public static final String getApplicationName(final Context context) {
try {
final PackageManager pm = context.getPackageManager();
final ApplicationInfo info = pm.getApplicationInfo(context.getPackageName(), 0);
return pm.getApplicationLabel(info).toString();
} catch (PackageManager.NameNotFoundException e) {
return ""; //取得失敗
}
}
●使用例(メインでのコードなど)
import android.util.Log;
//※アクティビティでの使用例
String applicationName = getApplicationName(this); //this は context
Log.d("DebugTag", "applicationName = " + applicationName);
アプリ名はローカライズされた文字列となる。ここでは自身のパッケージ名を使っているが、パッケージ名を引数に加えたオーバーロードでも作れば、他のアプリの名前も取得できる。
またなぜかデベロッパーマニュアルには載ってないが、以下のようにしても取得できるようだ。
final PackageManager pm = context.getPackageManager();
final ApplicationInfo info = pm.getApplicationInfo(context.getPackageName(), 0);
return info.loadLabel(pm).toString(); //なぜかマニュアルにはない?
■バージョン番号(int 型)を取得する
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
//バージョン番号(int 型)を取得する
//・1 以上のときバージョン番号 / 0 = パッケージが存在しない
public static final int getVersionCode(final Context context) {
try {
final PackageManager pm = context.getPackageManager();
final PackageInfo info = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return info.versionCode;
} catch (PackageManager.NameNotFoundException e) {
return 0; //取得失敗
}
}
●使用例(メインでのコードなど)
import android.util.Log;
//※アクティビティでの使用例
int versionCode = getVersionCode(this); //this は context
Log.d("DebugTag", "versionCode = " + versionCode);
バージョン番号とは常にインクリメントしていく、整数値の番号である。高いバージョンがインストしてある端末には低いバージョンをインストすることができない。その場合は高いバージョンをアンインストすれば、低いバージョンをインストすることができる。Google Play などに提出する際は低いバージョンをアップロードできないので注意しよう。
(参考)
・Android での API レベルの使用
■バージョン名(String 型)を取得する
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
//バージョン名(String 型)を取得する
//・取得成功 = "1.0.0" など / 取得失敗 = ""
public static final String getVersionName(final Context context) {
try {
final PackageManager pm = context.getPackageManager();
final PackageInfo info = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return info.versionName;
} catch (PackageManager.NameNotFoundException e) {
return ""; //取得失敗
}
}
●使用例(メインでのコードなど)
import android.util.Log;
//※アクティビティでの使用例
String versionName = getVersionName(this); //this は context
Log.d("DebugTag", "versionName = " + versionName);
バージョン名とはユーザーに伝えるバージョンのことである。文字列なので "1.0.0" とか "2.0b" など自由に設定できる。番号を上下することはできるが、ユーザーに混乱をもたらすので普通はやらない方が良いだろう。
(参考)
・Android での API レベルの使用
■ビルドターゲットSDKバージョン(API Level)を取得する
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
//ビルドターゲットとするSDKのバージョン(API Level)を取得する
//・1 以上のときバージョン番号 / 0 = 取得失敗
public static final int getTargetSdkVersion(final Context context) {
try {
final PackageManager pm = context.getPackageManager();
final ApplicationInfo info = pm.getApplicationInfo(context.getPackageName(), 0);
return info.targetSdkVersion;
} catch (PackageManager.NameNotFoundException e) {
return 0; //取得失敗
}
}
●使用例(メインでのコードなど)
import android.util.Log;
//※アクティビティでの使用例
int targetSdkVersion = getTargetSdkVersion(this); //this は context
Log.d("DebugTag", "targetSdkVersion = " + targetSdkVersion);
ターゲットSDKのバージョンとはアプリをビルド(コンパイル)する際に利用するSDKのバージョン(API Level)のことである。利用するクラスやメソッドによっては、この条件(API Level)を満たしてないとコンパイルエラー(というより、エディタ上でエラーが出る)でビルドできない。
(参考)
・minSdkVersionとtargetSdkVersionの関係
■最小SDKバージョン(API Level)を取得する
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
//実行できる最小SDKバージョン(API Level)を取得する (API 24 以上)
//・1 以上のときバージョン番号 / 0 = 取得失敗 (API 24 より下は常に0)
public static final int getMinSdkVersion(final Context context) {
if (Build.VERSION.SDK_INT < 24)
return 0; //未対応
try {
final PackageManager pm = context.getPackageManager();
final ApplicationInfo info = pm.getApplicationInfo(context.getPackageName(), 0);
return info.minSdkVersion; //API 24
} catch (PackageManager.NameNotFoundException e) {
return 0; //取得失敗
}
}
●使用例(メインでのコードなど)
import android.util.Log;
//※アクティビティでの使用例
int minSdkVersion = getMinSdkVersion(this); //API 24 / this は context
Log.d("DebugTag", "minSdkVersion = " + minSdkVersion);
最小SDKバージョンとは利用できる端末の最小のSDKのバージョン(API Level)のことである。この例では 24 となっているが、これは Android 7.0 のことであり、それより下の端末(Android 6.0 とか 5.0 とか)は使えないという意味である。バージョン(API Level)を上げれば色々な機能を使えるようになるが、対応できる端末は少なくなるので注意が必要である。例えば ARCore などは「require Android 7.0 or later」となっているので、6.0以下などは利用できない。そういうアプリを作るときには重要になる。
ただし、このメソッド自体(正確には ApplicationInfo.minSdkVersion 自体)が API Level 24 (Android 7.0) 以降でしか使えないので注意しよう(6.0以前は常に 0 になる)。
(参考)
・minSdkVersionとtargetSdkVersionの関係
(関連記事)
【Android】【Java】テーマ(スタイル)等のリソースID(int値)を文字列から取得する
【Android】【Java】アプリ名 app_name タグをコードで取得する
【Android】【Java】画像リソースIDをコードで取得する
【Android】【Java】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Bitmap)
【Android】【Java】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Drawable)
【Android】【Java】res/raw リソースフォルダからテキストファイルを読み込む
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/303-e1152cda
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |