Android'in sistem sürümünü nasıl kontrol edebilirim?


494

Sistem sürümünü (örn 1.0. 2.2, Vb.) Programlı olarak nasıl kontrol edebileceğimi bilen var mı ?


android stüdyoda bu çeki eklemek için kısayol (kod snippet'i veya canlı şablon) var
— Basheer AL-MOMANI

Yanıtlar:


420

Kontrol edin android.os.Build.VERSION.

  • CODENAME: Geçerli geliştirme kod adı veya bir sürüm derlemesi ise "REL" dizesi.
  • INCREMENTAL: Bu derlemeyi temsil etmek için temel kaynak denetimi tarafından kullanılan dahili değer.
  • RELEASE: Kullanıcı tarafından görülebilir sürüm dizesi.

72
nasıl kullanılacağına dair herhangi bir örnek var mı?
— Jonathan

1
Bunun zor kısmı, SDK_INT'in API Seviye 4'te tanımlanmış olması ve kullanılması 1-3'te başarısız olmasıdır. Bununla nasıl güzel başa çıkılacağını bilen var mı?
— Mart'ta Zordid

SDK API 1'den beri kullanılabilir, ayrıca INCREMENTAL tüm sürümler için kullanılabilir.
— nuala

1
Build.VERSION.RELEASE bir String'dir, bu nedenle bu String'i istediğiniz gibi kullanabilirsiniz.
— paiego

8
Endişelenme, cavemen bile bugün android API 1-3 kullanmıyor. @Zordid
— Josh

811

Nasıl kullanılacağıyla ilgili örnek:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
}

24
Eclair (7), Android 2.1'den daha eski bir sürümü tamamen görmezden geliyorum ve çok yakında 2.1 için desteği de durduruyoruz. Ancak SDK_INT yerine SDK'yı kullanabilirsiniz.
— ATom

12
SDK, API düzey 4'te tasvir edildi. Bunun yerine SDK_INT kullanın.
— erdomester

Bir sorum var: GINGERBREAD'den daha eski bir sistemde çalışıyorsa, android.os.Build.VERSION_CODES.GINGERBREAD'i alamayız, uygulama çökecek mi?
— HongchaoZhang

Hayır, çünkü GINGERBREAD, java derlemesi sırasında yalnızca sayı ile değiştirilecek. Sadece Android'in daha büyük derleme sürümünü kullanmak gerekir.
— ATom

97

Build.Version bu veriler için gidilecek yerdir. Biçimlendirmek için bir kod pasajı.

public String getAndroidVersion() {
    String release = Build.VERSION.RELEASE;
    int sdkVersion = Build.VERSION.SDK_INT;
    return "Android SDK: " + sdkVersion + " (" + release +")";
}

Görünüşe göre "Android SDK: 19 (4.4.4)"


63
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 bir işletim sisteminiz olmayabilir (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 yani Build.VERSION.RELEASE ne olursa olsun çalışır!


SDK'dan: "Kullanıcı tarafından görülebilir sürüm dizesi. Örneğin," 1.0 "veya" 3.4b5 "." .... "3.4b5" Hangi sürüm numarasının olduğunu nasıl belirleyebilirim?
— davs

Bütün cevap 2.3.3, sürüm numarası veya 2.2 veya 2.3.5 (benim durumumda özel rom). Bu bir bütün olarak OS Sürüm numarasıdır.
— Falcon165o

Aynı şeyi döndürür Menü >> Ayarlar >> Telefon Hakkında. Firmware Sürümü veya bunu etkileyen bir şey olarak etiketlenmelidir.
— Falcon165o

58
Bir int nasıl bir sıfır döndürür? SDK_INT ilkel bir int.
— Zsolt Safrany

57

Marshmallow'a eşit veya daha büyük cihaz sürümünü kontrol etmek için bu kodu kullanın.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){

    }

başkalarını tıkamak için sadece VERSION_CODES,
kitkat
için K, Nougat için loolipop N için L vb.


48

Baktığınız Android sürümünü öğrenebilirsiniz Build.VERSION.

Belgeler Build.VERSION.SDK_INT, içindeki değerlere karşı kontrol etmenizi önerir Build.VERSION_CODES.

Build.VERSION.SDK_INTSadece Android 1.6 (Donut) gibi API Seviye 4'te tanıtıldığını bildiğiniz sürece bu iyi . Bu sizi etkilemez, ancak uygulamanızın Android 1.5 veya önceki sürümlerde çalışmasını istiyorsanız, kullanımdan kaldırılmış olanı Build.VERSION.SDKkullanmanız gerekir.


30

Cevaplar hakkında yorum yapamam, ancak Kaushik'in cevabında büyük bir hata var: SDK_INT sistem sürümü ile aynı değil ama aslında API Seviyesine atıfta bulunuyor.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
    //this code will be executed on devices running ICS or later
}

Değer Build.VERSION_CODES.ICE_CREAM_SANDWICH14'e eşittir. 14, Ice Cream Sandwich'in API seviyesidir, sistem sürümü ise 4.0'dır. Bu nedenle, 4.0 yazarsanız, kod Donut'tan başlayarak tüm cihazlarda yürütülür, çünkü 4 Donut'un API seviyesidir ( Build.VERSION_CODES.DONUT4'e eşittir).

if(Build.VERSION.SDK_INT >= 4.0){
    //this code will be executed on devices running on DONUT (NOT ICS) or later
}

Bu örnek, 'sihirli sayı' kullanmanın kötü bir alışkanlık olmasının bir nedenidir.


7
Aslında Build.VERSION.SDK_INT, sürüm kodu değil API düzeyidir. Böylece doğru çizgi olurduif(Build.VERSION.SDK_INT >= 15){
— erdomester

Sürüm kodunun API düzeyiyle aynı olduğunu ve ICE_CREAM_SANDWICH'nin SDK_INT'inin 14 değil 15 olduğunu söylersem ne olur? @erdomester
— Beyondo

19

Örneğin, bir özellik yalnızca api21 için çalışır, aşağıda api21'deki hataları düzeltiriz

    if(Build.VERSION.SDK_INT >= 21) {
    //only api 21 above
    }else{
   //only api 21 down
    }

19

Unutmayın Build.VERSION.SDK_INT güvenilir değil, Falcon165o @ tarafından bahsedilen ve son zamanlarda ben de o birine ran.

Şu anda yüklü android Dize verilerini ( Android sürüm listesine göre ) almak için , böyle bir kod yaptım:

Java

//Current Android version data
public static String currentVersion(){
    double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
    String codeName="Unsupported";//below Jelly bean OR above Oreo
    if(release>=4.1 && release<4.4)codeName="Jelly Bean";
    else if(release<5)codeName="Kit Kat";
    else if(release<6)codeName="Lollipop";
    else if(release<7)codeName="Marshmallow";
    else if(release<8)codeName="Nougat";
    else if(release<9)codeName="Oreo";
    return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
}

Kotlin

fun currentVersion(): String {
    val release = java.lang.Double.parseDouble(java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
    var codeName = "Unsupported"//below Jelly bean OR above Oreo
    if (release >= 4.1 && release < 4.4)  codeName = "Jelly Bean"
    else if (release < 5) codeName = "Kit Kat"
    else if (release < 6) codeName = "Lollipop"
    else if (release < 7) codeName = "Marshmallow"
    else if (release < 8) codeName = "Nougat"
    else if (release < 9) codeName = "Oreo"
    return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}

Ürettiği bir çıktı örneği:

Marshmallow v6.0, API Seviyesi: 23


1
Sürüm birden fazla nokta içerdiğinde, Double.parseDouble (Build.VERSION.RELEASE) öğesinde bu kod çöküyor. Örneğin 7.1.1
— Miklós Keresztes

@ MiklósKeresztes Bilgilendirici yorumunuz için teşekkür ederim - Cevabımı düzelttim.
— Nikita Kurtin

7
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you  like.
}

Verdiğiniz çözüm hakkında biraz daha açıklama ekleyerek cevabınızı biraz daha açıklayabilir misiniz?
— abarisone

3

bu sınıfı kullan

import android.os.Build;

/**
 * Created by MOMANI on 2016/04/14.
 */
public class AndroidVersionUtil {
    public static int getApiVersion() {
        return android.os.Build.VERSION.SDK_INT;
    }

    public static boolean isApiVersionGraterOrEqual(int thisVersion) {
        return android.os.Build.VERSION.SDK_INT >= thisVersion;
    }
}

3

Bu yöntemi kullanın:

 public static String getAndroidVersion() {
        String versionName = "";

        try {
             versionName = String.valueOf(Build.VERSION.RELEASE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return versionName;
    }

Bu nasıl yardımcı olacak?
— samuel owino

1

bashAndroid cihazınızda olduğu göz önüne alındığında , bu bash işlevini kullanabilirsiniz:

function androidCodeName {
    androidRelease=$(getprop ro.build.version.release)
    androidCodeName=$(getprop ro.build.version.codename)

    # Time "androidRelease" x10 to test it as an integer
    case $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 in
        10) 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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.