Apakah ada cara untuk mendapatkan versi API yang sedang dijalankan ponsel?
Apakah ada cara untuk mendapatkan versi API yang sedang dijalankan ponsel?
Jawaban:
Seperti yang dijelaskan dalam dokumentasi Android, level SDK (integer) yang dijalankan ponsel tersedia di:
android.os.Build.VERSION.SDK_INT
Kelas yang terkait dengan int ini ada di android.os.Build.VERSION_CODES
kelas.
Contoh kode:
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
}
Sunting : SDK_INT ini tersedia sejak Donut (android 1.6 / API4) jadi pastikan aplikasi Anda tidak kompatibel dengan Cupcake (android 1.5 / API3) saat Anda menggunakannya atau aplikasi Anda akan macet (terima kasih kepada Programmer Bruce untuk ketepatannya) .
minSdkVersion
ke 4
(Android 1.6) dan lanjutkan.
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;
Itu akan memberi Anda angka aktual dari versi Anda; alias 2.3.3 atau 2.2. Masalah dengan menggunakan Build.VERSION.SDK_INT adalah jika Anda memiliki ponsel yang di-rooting atau custom rom, Anda bisa memiliki OS yang tidak standar (alias android saya menjalankan 2.3.5) dan itu akan menghasilkan nol saat menggunakan Build.VERSION.SDK_INT jadi Build.VERSION.RELEASE akan bekerja tidak masalah menggunakan versi Android standar atau tidak!
Untuk menggunakannya, Anda bisa melakukan ini;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
dan public static final int SDK_INT
dan Added in API level 4
bagaimana int (bukan Integer) kembali NULL
? NULL
adalah keadaan untuk objek sehingga Build atau VERSION-nya bisa secara null
teoritis tetapi dalam kasus seperti itu tidak hanya SDK_INT
tetapi RELEASE
juga akan menyebabkan NPE. SDK_INT mungkin dapat menyebabkan "Tidak ada pengecualian metode seperti itu" atau sesuatu seperti itu tetapi tidak null atau NPE. Jika hanya custom ROM yang merusak dokumen dan metode yang dinyatakan sebagai public static final Integer SDK_INT
. Saya hanya mencoba menentukan sifat masalah untuk membuat solusi.
null
tidak masuk akal.
Dengan mempertimbangkan semua kata, berikut adalah kode yang saya gunakan untuk mendeteksi apakah perangkat memiliki Froyo atau OS Android yang lebih baru (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;
}
Jelas, Anda dapat memodifikasi bahwa jika kondisi mempertimbangkan versi 1.0 & 1.5 Android jika Anda memerlukan pemeriksa generik. Anda mungkin akan berakhir dengan sesuatu seperti ini:
// 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;
}
}
Beri tahu saya jika kode tidak berfungsi untuk Anda.
coba ini:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Oke. Ini menggunakan getApplicationInfo()
metode Context
kelas.
SDK.INT didukung untuk Android 1.6 dan lebih tinggi
SDK didukung untuk semua versi
Jadi saya lakukan:
String sdk_version_number = android.os.Build.VERSION.SDK;
Kredit ke: CommonsWare atas jawaban ini
Saya lebih suka memiliki versi sebagai nomor handeled lebih mudah daripada saya menulis ini:
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();
}
Ini Coding Selamat Bekerja
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Catatan Harap pastikan paket impor Anda sudah benar (impor paket nama paket aplikasi Anda jika tidak berfungsi dengan benar)
Saya memperbaiki kode yang saya gunakan
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;
}