FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Android »【Android】【Java】アプリ名、バージョン番号(versionCode)、バージョン名(versionName) などをコードで取得する(PackageManager を利用)

【Android】【Java】アプリ名、バージョン番号(versionCode)、バージョン名(versionName) などをコードで取得する(PackageManager を利用)  


 前回 "app_name" など、リソースからIDを取得→アプリ名取得する方法などを書いたが、PackageManager からもアプリの情報などを取得することができる。ついでなので、バージョン番号(versionCode)バージョン名(versionName)ビルドターゲットSDKのバージョン(targetSdkVersion)最小SDKバージョン(minSdkVersion)なども書いておこう。これらの違いは簡単な解説も書いておくが、以下に資料を載せておくので必要なら確認して欲しい。

(参考)
Android での API レベルの使用
minSdkVersionとtargetSdkVersionの関係


(※) 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);

applicationName = AppInfoTest

 アプリ名はローカライズされた文字列となる。ここでは自身のパッケージ名を使っているが、パッケージ名を引数に加えたオーバーロードでも作れば、他のアプリの名前も取得できる。

 またなぜかデベロッパーマニュアルには載ってないが、以下のようにしても取得できるようだ。
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);

versionCode = 1

 バージョン番号とは常にインクリメントしていく、整数値の番号である。高いバージョンがインストしてある端末には低いバージョンをインストすることができない。その場合は高いバージョンをアンインストすれば、低いバージョンをインストすることができる。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);

versionName = 1.0

 バージョン名とはユーザーに伝えるバージョンのことである。文字列なので "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);

targetSdkVersion = 27

 ターゲット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);

minSdkVersion = 24

 最小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 リソースフォルダからテキストファイルを読み込む


関連記事
スポンサーサイト



category: Android

thread: プログラミング

janre: コンピュータ

tag: Androidライブラリ  Java 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/303-e1152cda
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR