電話が現在実行しているAPIバージョンを取得する方法はありますか?
12 に答える
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 に感謝します)。 .
非常に簡単:
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
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;
上記のすべてを考慮して、デバイスに 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;
}
}
コードが機能しない場合はお知らせください。
android.os.Build.VERSION.SDK は、API レベルの値を提供する必要があります。Android ドキュメントで、API レベルから Android バージョンへのマッピングを簡単に見つけることができます。8 は 2.2、7 は 2.1 などです。
とった。そのクラスのgetApplicationInfo()
メソッドを使用します。Context
私は通常、これらのコードを関数に追加して Android バージョンを取得することを好みます。
int whichAndroidVersion;
whichAndroidVersion= Build.VERSION.SDK_INT;
textView.setText("" + whichAndroidVersion); //If you don't use "" then app crashes.
たとえば、上記のコードは、テキストを textView に「29」として設定します。
私はこれを書いたよりも簡単な方法で処理される番号としてバージョンを持っていることを好みます:
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();
}