32

このようなAndroidバージョンを見つけるためのコードを書きます

String version=Build.VERSION.RELEASE;

このコードを使用すると、バージョン番号を取得できますが、バージョン名が必要です。バージョン名を取得するには?

4

14 に答える 14

63

先に示唆したように、振り返りがこの質問の鍵のようです。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

楽しみ!

于 2012-11-06T20:17:13.563 に答える
19

最適化されたコード、これは機能します:

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);
于 2016-07-28T13:45:02.197 に答える
16

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 }
于 2019-05-02T05:36:31.187 に答える
5

http://developer.android.com/reference/android/os/Build.VERSION_CODES.htmlには、探している名前のフィールドが含まれています。したがって、リフレクションを使用して、「バージョン」値に対応するフィールドを見つけることができます。

なぜ名前が欲しいのですか?

于 2012-05-11T08:19:59.147 に答える
4

これらから情報を取得します

android.os.Build.VERSION_CODES 

android.os.Build.VERSION.SDK_INT

詳細については、次のリンクから入手できます。

プログラムによる Android API バージョンの取得

これがあなたを助けることを願っています。

于 2012-05-11T08:19:07.190 に答える
3

これをチェックしてください:

// 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 バージョンごとにリストを更新する必要があります (正確であることが重要な場合)。

于 2013-05-03T14:11:44.920 に答える