Bagian tersulit dari ini adalah SDK_INT telah didefinisikan di API Level 4 dan menggunakannya gagal pada 1-3. Adakah yang tahu cara menangani hal itu dengan baik?
Zordid
SDK tersedia sejak API 1, juga INCREMENTAL tersedia untuk semua versi.
nuala
1
Build.VERSION.RELEASE adalah sebuah String, oleh karena itu Anda dapat menggunakan String ini sesuka Anda.
paiego
8
Jangan khawatir, bahkan manusia gua pun tidak menggunakan API Android 1-3 hari ini. @Zordid
Josh
811
Contoh cara menggunakannya:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD){// only for gingerbread and newer versions}
Saya benar-benar mengabaikan versi yang lebih lama dari Eclair (7), Android 2.1 dan segera kami menghentikan dukungan untuk 2.1 juga. Tapi Anda bisa menggunakan SDK bukan SDK_INT.
ATom
12
SDK didepresiasikan di API level 4. Gunakan SDK_INT sebagai gantinya.
erdomester
Saya punya pertanyaan: jika itu berjalan pada sistem yang lebih tua dari GINGERBREAD, maka kita tidak bisa mendapatkan android.os.Build.VERSION_CODES.GINGERBREAD, apakah aplikasinya akan macet?
HongchaoZhang
Tidak, karena GINGERBREAD akan diganti hanya dengan nomor selama pembuatan java. Anda hanya perlu menggunakan versi kompilasi Android yang lebih besar.
ATom
97
Build.Version adalah tempat untuk data ini. Berikut ini cuplikan kode untuk cara memformatnya.
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 mungkin tidak memiliki OS 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 apa pun yang terjadi!
Ini bagus selama Anda menyadari bahwa Build.VERSION.SDK_INTitu hanya diperkenalkan di API Level 4, yang berarti Android 1.6 (Donat). Jadi ini tidak akan memengaruhi Anda, tetapi jika Anda ingin aplikasi Anda berjalan di Android 1.5 atau lebih lama maka Anda harus menggunakan yang sudah usang Build.VERSION.SDK.
Saya tidak bisa mengomentari jawabannya, tetapi ada kesalahan besar dalam jawaban Kaushik: SDK_INT tidak sama dengan versi sistem tetapi sebenarnya mengacu pada Tingkat API.
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.ICE_CREAM_SANDWICH){//this code will be executed on devices running ICS or later}
Nilai Build.VERSION_CODES.ICE_CREAM_SANDWICHsama dengan 14. 14 adalah level API dari Ice Cream Sandwich, sedangkan versi sistem adalah 4.0. Jadi jika Anda menulis 4.0, kode Anda akan dieksekusi pada semua perangkat mulai dari Donut, karena 4 adalah tingkat API dari Donut ( Build.VERSION_CODES.DONUTsama dengan 4).
if(Build.VERSION.SDK_INT >=4.0){//this code will be executed on devices running on DONUT (NOT ICS) or later}
Contoh ini adalah alasan mengapa menggunakan 'angka ajaib' adalah kebiasaan buruk.
Karena Anda memiliki bashperangkat Android, Anda dapat menggunakan fungsi bash ini:
function androidCodeName {
androidRelease=$(getprop ro.build.version.release)
androidCodeName=$(getprop ro.build.version.codename)# Time "androidRelease" x10 to test it as an integercase $androidRelease in[0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9]) androidRelease=$(echo $androidRelease | cut -d.-f1-2| tr -d .);;[0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;[0-9]) androidRelease+="0";;esac[-n "$androidRelease"]&&[ $androidCodeName = REL ]&&{# Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
androidCodeName=""case $androidRelease in10) androidCodeName+=NoCodename;;11) androidCodeName+="Petit Four";;15) androidCodeName+=Cupcake;;20|21) androidCodeName+=Eclair;;22) androidCodeName+=FroYo;;23) androidCodeName+=Gingerbread;;30|31|32) androidCodeName+=Honeycomb;;40) androidCodeName+="Ice Cream Sandwich";;41|42|43) androidCodeName+="Jelly Bean";;44) androidCodeName+=KitKat;;50|51) androidCodeName+=Lollipop;;60) androidCodeName+=Marshmallow;;70|71) androidCodeName+=Nougat;;80|81) androidCodeName+=Oreo;;90) androidCodeName+=Pie;;100) androidCodeName+=ToBeReleased;;*) androidCodeName=unknown;;esac}
echo $androidCodeName
}
Jawaban:
Periksa
android.os.Build.VERSION
.sumber
Contoh cara menggunakannya:
sumber
Build.Version adalah tempat untuk data ini. Berikut ini cuplikan kode untuk cara memformatnya.
Sepertinya ini "Android SDK: 19 (4.4.4)"
sumber
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 mungkin tidak memiliki OS 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 apa pun yang terjadi!
sumber
Untuk memeriksa versi perangkat yang lebih besar atau sama dengan Marshmallow, gunakan kode ini.
untuk mengecek orang lain cukup ubah VERSION_CODES seperti,
K untuk kitkat,
L untuk loolipop N untuk Nougat dan seterusnya ...
sumber
Anda dapat mengetahui versi Android yang melihatnya
Build.VERSION
.Dokumentasi merekomendasikan Anda memeriksa
Build.VERSION.SDK_INT
nilai-nilai diBuild.VERSION_CODES
.Ini bagus selama Anda menyadari bahwa
Build.VERSION.SDK_INT
itu hanya diperkenalkan di API Level 4, yang berarti Android 1.6 (Donat). Jadi ini tidak akan memengaruhi Anda, tetapi jika Anda ingin aplikasi Anda berjalan di Android 1.5 atau lebih lama maka Anda harus menggunakan yang sudah usangBuild.VERSION.SDK
.sumber
Saya tidak bisa mengomentari jawabannya, tetapi ada kesalahan besar dalam jawaban Kaushik: SDK_INT tidak sama dengan versi sistem tetapi sebenarnya mengacu pada Tingkat API.
Nilai
Build.VERSION_CODES.ICE_CREAM_SANDWICH
sama dengan 14. 14 adalah level API dari Ice Cream Sandwich, sedangkan versi sistem adalah 4.0. Jadi jika Anda menulis 4.0, kode Anda akan dieksekusi pada semua perangkat mulai dari Donut, karena 4 adalah tingkat API dari Donut (Build.VERSION_CODES.DONUT
sama dengan 4).Contoh ini adalah alasan mengapa menggunakan 'angka ajaib' adalah kebiasaan buruk.
sumber
if(Build.VERSION.SDK_INT >= 15){
Sebagai contoh, sebuah fitur hanya berfungsi untuk api21 ke atas berikut ini kami memperbaiki bug di api21 ke bawah
sumber
Sadarilah bahwa Build.VERSION.SDK_INT tidak dapat diandalkan, ini disebutkan oleh @ Falcon165o dan baru-baru ini saya juga menabraknya.
Jadi untuk mendapatkan data String (berdasarkan daftar versi Android ) dari android yang saat ini diinstal, saya membuat kode seperti ini:
Jawa
Kotlin
Contoh output yang dihasilkannya:
sumber
sumber
gunakan kelas ini
sumber
Gunakan metode ini:
sumber
Karena Anda memiliki
bash
perangkat Android, Anda dapat menggunakan fungsi bash ini:sumber