Telefonun çalışmakta olduğu API sürümünü almanın herhangi bir yolu var mı?
Telefonun çalışmakta olduğu API sürümünü almanın herhangi bir yolu var mı?
Yanıtlar:
Android belgelerinde açıklandığı gibi, telefonun çalıştığı SDK düzeyi (tamsayı) şu dillerde kullanılabilir:
android.os.Build.VERSION.SDK_INT
Bu int'e karşılık gelen android.os.Build.VERSION_CODES
sınıf sınıftadır.
Kod örneği:
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
}
Düzenleme : Bu SDK_INT Donut (android 1.6 / API4) beri kullanılabilir, bu yüzden uygulamanızı kullandığınızda Cupcake (android 1.5 / API3) ile retro uyumlu olmadığından emin olun veya uygulamanız çökecektir (hassasiyet için Programmer Bruce sayesinde) .
minSdkVersion
için 4
(Android 1.6) ve devam edin.
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;
Bu size sürümünüzün gerçek sayılarını verecektir; aka 2.3.3 veya 2.2. Build.VERSION.SDK_INT kullanmayla ilgili sorun, köklü bir telefonunuz veya özel romunuz varsa, standart olmayan bir işletim sisteminiz olabilir (diğer bir deyişle androidim 2.3.5 çalıştırıyor olabilir) ve Build.VERSION.SDK_INT kullanırken boş bir değer döndürür Bu nedenle Build.VERSION.RELEASE, standart Android sürümünü kullanıyor olsanız da olmasanız da çalışır!
Kullanmak için bunu yapabilirsin;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
ve public static final int SDK_INT
ve Added in API level 4
int (Tamsayı değil) nasıl geri dönebilirdi NULL
? NULL
onun Yapı veya VERSİYONU olabilir böylece bir devlet bir nesne içindir null
sadece teorik olarak ancak bu durumda SDK_INT
ancak RELEASE
bir NPE neden olacaktır da. SDK_INT muhtemelen "Böyle bir yöntem istisnası yok" veya buna benzer bir şeye neden olabilir, ancak null veya NPE değil. Yalnızca özel ROM dokümanları ve yöntem olarak bildirilirse public static final Integer SDK_INT
. Ben sadece geçici bir çözüm bulmak için bir sorunun doğasını belirlemeye çalışıyorum.
null
mantıklı olmadığı için bunu reddettim .
Tüm bunları göz önünde bulundurarak, cihazın Froyo veya daha yeni bir Android OS (2.2+) olup olmadığını tespit etmek için kullandığım kod:
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;
}
Açıkçası, eğer durum genel denetleyiciye ihtiyacınız olması durumunda Android'in 1.0 ve 1.5 sürümlerini dikkate alacaksa değiştirebilirsiniz. Muhtemelen böyle bir şeyle sonuçlanacaksınız:
// 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;
}
}
Kodun sizin için çalışmadığını bildirin.
bunu dene:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Anladım. Sınıf getApplicationInfo()
yöntemini kullanıyor Context
.
SDK.INT, Android 1.6 ve üstü için desteklenir
SDK tüm sürümler için desteklenir
Ben de öyle:
String sdk_version_number = android.os.Build.VERSION.SDK;
Kredi: CommonsWare bu cevap üzerinde
i bu yazdı daha handeled numarası olarak sürümü var tercih ederim:
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();
}
Mutlu Kodlama Çalışıyor
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Not Lütfen içe aktarma paketinizin doğru olduğundan emin olun (uygulama paketi adınızı içe aktarın, aksi takdirde düzgün çalışmaz)
Kullanılan kodu geliştirdim
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;
}