電話が現在実行しているAPIバージョンを取得する方法はありますか?
電話が現在実行しているAPIバージョンを取得する方法はありますか?
回答:
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はドーナツ(android 1.6 / API4)以降で使用できるため、使用する場合、アプリケーションがCupcake(android 1.5 / API3)とレトロコンパチブルでないことを確認してください。 。
minSdkVersion
を4
(Android 1.6)に設定して続行します。
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(別名Androidが2.3.5を実行している)が存在する可能性があり、Build.VERSION.SDK_INTを使用するとnullが返されます。そのため、Build.VERSION.RELEASEは、標準のAndroidバージョンを使用してもしなくても機能します。
それを使用するには、これを行うだけです。
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
と public static final int SDK_INT
、 Added in API level 4
(整数ではなく)intはどのように返すことができNULL
ますか?NULL
はオブジェクトの状態なので、そのBuildまたはVERSIONはnull
理論的には可能ですが、そのような場合だけでSDK_INT
なくRELEASE
、NPEも引き起こします。SDK_INTは、おそらく「そのようなメソッド例外はありません」またはそのような何かを引き起こす可能性がありますが、nullまたはNPEではありません。カスタムROMだけがドキュメントととして宣言されたメソッドを壊す場合public static final Integer SDK_INT
。回避策を作成するために、問題の性質を特定しようとしています。
null
おらず、警告が意味をなさないため、私はこれに反対票を投じました。
すべてのことを考慮に入れて、デバイスが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条件を変更できます。あなたはおそらく次のようなものになるでしょう:
// 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;
}
}
コードが機能しない場合はお知らせください。
とった。クラスのgetApplicationInfo()
メソッドを使用していContext
ます。
SDK.INTはAndroid 1.6以上でサポートされています
SDKはすべてのバージョンでサポートされています
私もです:
String sdk_version_number = android.os.Build.VERSION.SDK;
クレジット:この回答に対するCommonsWare
私はこれを書いたよりも簡単な方法でバージョンを持っている方が好きです:
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();
}
使用したコードを改善しました
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;
}