このようなAndroidバージョンを見つけるためのコードを書きます
String version=Build.VERSION.RELEASE;
このコードを使用すると、バージョン番号を取得できますが、バージョン名が必要です。バージョン名を取得するには?
このようなAndroidバージョンを見つけるためのコードを書きます
String version=Build.VERSION.RELEASE;
このコードを使用すると、バージョン番号を取得できますが、バージョン名が必要です。バージョン名を取得するには?
先に示唆したように、振り返りがこの質問の鍵のようです。StringBuilder と追加の書式設定は必要ありません。使用法を説明するためにのみ追加されました。
import java.lang.reflect.Field;
...
StringBuilder builder = new StringBuilder();
builder.append("android : ").append(Build.VERSION.RELEASE);
Field[] fields = Build.VERSION_CODES.class.getFields();
for (Field field : fields) {
String fieldName = field.getName();
int fieldValue = -1;
try {
fieldValue = field.getInt(new Object());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
if (fieldValue == Build.VERSION.SDK_INT) {
builder.append(" : ").append(fieldName).append(" : ");
builder.append("sdk=").append(fieldValue);
}
}
Log.d(LOG_TAG, "OS: " + builder.toString());
私の 4.1 エミュレーターでは、次の出力が得られます。
D/MainActivity( 1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16
楽しみ!
最適化されたコード、これは機能します:
import java.lang.reflect.Field;
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Log.d("Android OsName:",osName);
API 28 (Android Pie)以降、Build.VERSION_CODESの一部のフィールドが変更されました。
したがって、次を使用する場合:
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Out Of Range Exception により、アプリがすぐにクラッシュします。
すべての API レベルのソリューションは次のとおりです。
Field[] fields = Build.VERSION_CODES.class.getFields();
String codeName = "UNKNOWN";
for (Field field : fields) {
try {
if (field.getInt(Build.VERSION_CODES.class) == Build.VERSION.SDK_INT) {
codeName = field.getName();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
または、Java 8 のスタイルの Kotlin で:
val fields = Build.VERSION_CODES::class.java.fields
var codeName = "UNKNOWN"
fields.filter { it.getInt(Build.VERSION_CODES::class) == Build.VERSION.SDK_INT }
.forEach { codeName = it.name }
http://developer.android.com/reference/android/os/Build.VERSION_CODES.htmlには、探している名前のフィールドが含まれています。したがって、リフレクションを使用して、「バージョン」値に対応するフィールドを見つけることができます。
なぜ名前が欲しいのですか?
これらから情報を取得します
android.os.Build.VERSION_CODES
android.os.Build.VERSION.SDK_INT
詳細については、次のリンクから入手できます。
これがあなたを助けることを願っています。
これをチェックしてください:
// Names taken from android.os.build.VERSION_CODES
String[] mapper = new String[] {
"ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT",
"ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD",
"GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2",
"ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN"
};
int index = Build.VERSION.SDK_INT - 1;
String versionName = index < mapper.length? mapper[index] : "UNKNOWN_VERSION"; // > JELLY_BEAN)
この解決策は、バージョン コードが 1 ずつ増加し続ける限り機能することに注意してください。新しい Android バージョンごとにリストを更新する必要があります (正確であることが重要な場合)。