642

電話が現在実行しているAPIバージョンを取得する方法はありますか?

4

12 に答える 12

1160

Android のドキュメントで説明されているように、電話が実行されている SDK レベル (整数) は次で利用できます。

android.os.Build.VERSION.SDK_INT

この int に対応するandroid.os.Build.VERSION_CODESクラスはクラスにあります。

コード例:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    // Do something for lollipop and above versions
} else{
    // do something for phones running an SDK before lollipop
}

編集: この SDK_INT は Donut (Android 1.6 / API4) 以降で使用できるため、アプリケーションを使用するときは、Cupcake (Android 1.5 / API3) とのレトロ互換性がないことを確認してください。そうしないと、アプリケーションがクラッシュします (精度についてはプログラマー Bruce に感謝します)。 .

対応する Android ドキュメントはこちらこちら

于 2010-10-15T09:01:31.923 に答える
174

非常に簡単:

   String manufacturer = Build.MANUFACTURER;
   String model = Build.MODEL;
   int version = Build.VERSION.SDK_INT;
   String versionRelease = Build.VERSION.RELEASE;

Log.e("MyActivity", "manufacturer " + manufacturer
            + " \n model " + model
            + " \n version " + version
            + " \n versionRelease " + versionRelease
    );

出力:

E/MyActivity:   manufacturer ManufacturerX
                model SM-T310 
                version 19 
                versionRelease 4.4.2
于 2016-01-28T22:39:33.890 に答える
87
Build.VERSION.RELEASE;

これにより、バージョンの実際の数値が得られます。別名 2.3.3 または 2.2。Build.VERSION.SDK_INT を使用する際の問題は、ルート化された電話またはカスタム rom を使用している場合、非標準の OS (私のアンドロイドは 2.3.5 を実行しています) を使用している可能性があり、Build.VERSION.SDK_INT を使用すると null が返されることです。したがって、Build.VERSION.RELEASE は、標準の Android バージョンを使用しているかどうかに関係なく機能します。

これを使用するには、次のようにします。

String androidOS = Build.VERSION.RELEASE;
于 2012-03-07T14:49:27.980 に答える
32

上記のすべてを考慮して、デバイスに Froyo または新しい Android OS (2.2+) があるかどうかを検出するために使用するコードを次に示します。

public static boolean froyoOrNewer() {
    // SDK_INT is introduced in 1.6 (API Level 4) so code referencing that would fail
    // Also we can't use SDK_INT since some modified ROMs play around with this value, RELEASE is most versatile variable
    if (android.os.Build.VERSION.RELEASE.startsWith("1.") ||
        android.os.Build.VERSION.RELEASE.startsWith("2.0") ||
        android.os.Build.VERSION.RELEASE.startsWith("2.1"))
        return false;

    return true;
}

明らかに、一般的なチェッカーが必要な場合に備えて、if 条件を変更して Android の 1.0 および 1.5 バージョンを考慮することができます。おそらく次のような結果になります。

// returns true if current Android OS on device is >= verCode 
public static boolean androidMinimum(int verCode) {
    if (android.os.Build.VERSION.RELEASE.startsWith("1.0"))
        return verCode == 1;
    else if (android.os.Build.VERSION.RELEASE.startsWith("1.1")) {
        return verCode <= 2;
    } else if (android.os.Build.VERSION.RELEASE.startsWith("1.5")) {
        return verCode <= 3;
    } else {
        return android.os.Build.VERSION.SDK_INT >= verCode;
    }
}

コードが機能しない場合はお知らせください。

于 2012-07-27T08:01:10.670 に答える
9

android.os.Build.VERSION.SDK は、API レベルの値を提供する必要があります。Android ドキュメントで、API レベルから Android バージョンへのマッピングを簡単に見つけることができます。8 は 2.2、7 は 2.1 などです。

于 2010-08-06T12:44:28.747 に答える
3

とった。そのクラスのgetApplicationInfo()メソッドを使用します。Context

于 2010-08-06T12:41:19.650 に答える
2

私は通常、これらのコードを関数に追加して Android バージョンを取得することを好みます。

int whichAndroidVersion;

whichAndroidVersion= Build.VERSION.SDK_INT;
textView.setText("" + whichAndroidVersion); //If you don't use "" then app crashes.

たとえば、上記のコードは、テキストを textView に「29」として設定します。

于 2021-01-15T06:48:47.713 に答える
0

私はこれを書いたよりも簡単な方法で処理される番号としてバージョンを持っていることを好みます:

  public static float getAPIVerison() {

    Float f = null;
    try {
        StringBuilder strBuild = new StringBuilder();
        strBuild.append(android.os.Build.VERSION.RELEASE.substring(0, 2));
        f = new Float(strBuild.toString());
    } catch (NumberFormatException e) {
        Log.e("", "error retriving api version" + e.getMessage());
    }

    return f.floatValue();
}
于 2014-05-14T09:18:18.850 に答える