web-dev-qa-db-ja.com

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

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

518
Parth Mehta

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はDoughnut(Android 1.6/API 4)から利用可能ですので、それを使用するとあなたのアプリケーションがCupcake(Android 1.5/API 3)とレトロ互換でないことを確認してください。精度のためのプログラマブルース)。

対応するAndroidのドキュメントは here および here です。

984
ol_v_er

非常に簡単:

   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
114
CommonSenseCode
Build.VERSION.RELEASE;

それはあなたにあなたのバージョンの実際の数を与えるでしょう。別名2.3.3または2.2。 Build.VERSION.SDK_INTを使用する際の問題は、根ざした電話またはカスタムROMを使用している場合、非標準OS(別名私のAndroidは2.3.5を実行している)があり、Build.VERSION.SDK_INTを使用するとnullが返されることです。そのため、Build.VERSION.RELEASEは、標準のAndroidバージョンを使用しているかどうかに関係なく動作します。

それを使うためには、あなたはこれをすることができます。

String androidOS = Build.VERSION.RELEASE;
78
Falcon165o

すべてを考慮に入れて、これが私がデバイスが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;
}

明らかに、あなたがジェネリックチェッカーを必要とする場合に備えてAndroidの1.0と1.5バージョンを考慮に入れるようにif if条件を修正することができます。あなたはおそらくこのようなものになってしまうでしょう:

// 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;
    }
}

コードが機能していないかどうかを教えてください。

31
kape123

これを試して:

 if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Gingerbread) {
     // only for Gingerbread and newer versions
 }
21
Khalid Taha

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

9
jvdneste

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

4
Parth Mehta

その実用的なハッピーコーディング

String versionRelease = BuildConfig.VERSION_NAME;

versionRelease :- 2.1.17
1
Keshav Gera

私が使ったコードを改良しました

public static float getAPIVerison() {

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

    return f;
}
0
alex

私はこれを書いたよりももっと簡単に扱われるように番号としてバージョンを持っていることを好む:

  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();
}
0
alex