मैं एंड्रॉइड के सिस्टम संस्करण की जांच कैसे कर सकता हूं?


494

किसी को भी पता है कि मैं कैसे सिस्टम संस्करण की जाँच कर सकते है (उदाहरण के लिए 1.0, 2.2आदि) प्रोग्राम के?


एंड्रॉइड स्टूडियो में इस चेक को जोड़ने के लिए शॉर्टकट (कोड स्निपेट या लाइव टेम्प्लेट) है
बशीर AL-MOMANI

जवाबों:


420

जाँच करें android.os.Build.VERSION

  • CODENAME: वर्तमान विकास कोडनाम, या स्ट्रिंग "REL" यदि यह एक रिलीज बिल्ड है।
  • INCREMENTAL: इस स्रोत का प्रतिनिधित्व करने के लिए अंतर्निहित स्रोत नियंत्रण द्वारा उपयोग किया जाने वाला आंतरिक मूल्य।
  • RELEASE: उपयोगकर्ता-दृश्यमान संस्करण स्ट्रिंग।

72
किसी भी उदाहरण पर इसका उपयोग कैसे करें?
जोनाथन

1
इसके बारे में कठिन बात यह है कि SDK_INT को एपीआई स्तर 4 में परिभाषित किया गया है और इसका उपयोग 1-3 पर विफल रहता है। क्या किसी को पता है कि कैसे अच्छी तरह से निपटने के लिए?
जोर्डिड

एसडीके एपीआई 1 के बाद से उपलब्ध है, यह भी सभी संस्करणों के लिए उपलब्ध है।
नुल्ला

1
Build.VERSION.RELEASE एक स्ट्रिंग है, इसलिए आप चाहें तो इस स्ट्रिंग का उपयोग कर सकते हैं।
पेइगो

8
चिंता न करें, यहां तक ​​कि गुफाएं भी आज एंड्रॉइड एपीआई 1-3 का उपयोग नहीं कर रही हैं। @ जोर्डिड
जोश

811

उदाहरण के लिए इसका उपयोग कैसे करें:

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

24
मैं एक्लेयर (7), एंड्रॉइड 2.1 की तुलना में किसी भी पुराने संस्करण को पूरी तरह से अनदेखा करता हूं और बहुत जल्द हम 2.1 के लिए भी समर्थन बंद कर देते हैं। लेकिन आप SDK_INT की जगह SDK का उपयोग कर सकते हैं।
May12

12
एसडीके को एपीआई स्तर 4 में अपदस्थ किया गया था। इसके बजाय एसडीके_आईएनटी का उपयोग करें।
इरेडमस्टर

मेरा एक प्रश्न है: यदि यह GINGERBREAD से पुराने सिस्टम पर चल रहा है, तो हमें android.os.Build.VERSION_CODES.GINGERBREAD नहीं मिल सकता है, तो क्या ऐप क्रैश हो जाएगा?
हांगचोझंग

नहीं, क्योंकि जावा बिल्ड के दौरान GINGERBREAD सिर्फ नंबर से बदल जाएगा। Android के बड़े संकलन संस्करण का उपयोग करना आवश्यक है।
एटम

97

Build.Version इस डेटा के लिए जाने का स्थान है। यहाँ एक कोड स्निपेट है कि इसे कैसे प्रारूपित किया जाए।

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

इस तरह दिखता है "Android SDK: 19 (4.4.4)"


63
Build.VERSION.RELEASE;

यह आपको आपके संस्करण की वास्तविक संख्या देगा; उर्फ 2.3.3 या 2.2। Build.VERSION.SDK_INT का उपयोग करने के साथ समस्या यह है कि यदि आपके पास एक रूटेड फ़ोन या कस्टम रोम है, तो आपके पास कोई भी मानक OS नहीं हो सकता (aka my android 2.3.5 चल रहा है) और बिल्ड का उपयोग करते समय यह अशक्त हो जाएगा। VERS.S.SKKINT तो Build.VERSION.RELEASE काम करेगा कोई बात नहीं!


एसडीके से: "उपयोगकर्ता-दृश्यमान संस्करण स्ट्रिंग। जैसे," 1.0 "या" 3.4b5 "।" .... "3.4b5" मैं यह कैसे निर्धारित कर सकता हूं कि यह किस संस्करण की संख्या है?
davs

पूरे उत्तर 2.3.3 संस्करण संख्या, या 2.2, या 2.3.5 (मेरे मामले में कस्टम रोम) है। यह एक पूरे के रूप में ओएस संस्करण संख्या है।
फाल्कन 165o

यह एक ही चीज़ देता है मेनू >> सेटिंग्स >> फ़ोन के बारे में। इसे फर्मवेयर वर्जन या उस प्रभावित चीज पर लेबल लगाना चाहिए।
फाल्कन 165o

58
एक नरक एक अशक्त वापस कैसे कर सकता है? SDK_INT एक आदिम इंट है।
Zsolt Safrany

57

डिवाइस संस्करण की जाँच के लिए जो मार्शमैलो से अधिक या बराबर है, इस कोड का उपयोग करें।

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

    }

अन्य लोगों को रोकने के लिए बस VERSION_CODES को बदलें, जैसे कि किटकैट के लिए
,
L नूगट के लिए लॉलीपॉप एन के लिए और इसी तरह ...


48

आप Android संस्करण को देख सकते हैं Build.VERSION

प्रलेखन आपको Build.VERSION.SDK_INTमूल्यों के खिलाफ जांच करने की सलाह देता है Build.VERSION_CODES

यह तब तक ठीक है जब तक आपको एहसास होता है कि Build.VERSION.SDK_INTकेवल एपीआई स्तर 4 में पेश किया गया था, जिसे एंड्रॉइड 1.6 (डोनट) कहना है। तो यह आपको प्रभावित नहीं करेगा, लेकिन अगर आप चाहते हैं कि आपका ऐप एंड्रॉइड 1.5 या उससे पहले के संस्करण पर चले, तो आपको Build.VERSION.SDKइसके बजाय पदावनत का उपयोग करना होगा ।


30

मैं उत्तरों पर टिप्पणी नहीं कर सकता, लेकिन कौशिक के उत्तर में एक बड़ी गलती है: SDK_INT सिस्टम संस्करण के समान नहीं है, लेकिन वास्तव में एपीआई स्तर को संदर्भित करता है।

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

मान Build.VERSION_CODES.ICE_CREAM_SANDWICH14 के बराबर है। 14 आइस क्रीम सैंडविच का एपीआई स्तर है, जबकि सिस्टम संस्करण 4.0 है। इसलिए यदि आप 4.0 लिखते हैं, तो आपका कोड डोनट से शुरू होने वाले सभी उपकरणों पर निष्पादित किया जाएगा, क्योंकि 4 डोनट का एपीआई स्तर ( Build.VERSION_CODES.DONUT4 के बराबर) है।

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

यह उदाहरण एक कारण है कि 'मैजिक नंबर' का उपयोग करना एक बुरी आदत है।


7
दरअसल, Build.VERSION.SDK_INT एपीआई स्तर है, न कि संस्करण कोड। तो उचित लाइन होगीif(Build.VERSION.SDK_INT >= 15){
erdomester

क्या होगा यदि मैंने आपको बताया कि संस्करण कोड API स्तर के समान है और ICE_CREAM_SANDWICH का SDK_INT 14 नहीं 15 है? @erdomester
Beyondo

19

उदाहरण के लिए, एक सुविधा केवल api21 के लिए काम करती है, हम नीचे api21 में बग्स को ठीक करते हैं

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

19

ध्यान रखें कि Build.VERSION.SDK_INT विश्वसनीय नहीं है, यह @ Falcon165o द्वारा उल्लेख किया गया है और हाल ही में मैं भी एक में भाग गया।

तो स्ट्रिंग डेटा प्राप्त करने के लिए ( Android संस्करण सूची के आधार पर) वर्तमान में स्थापित Android ) , मैंने इस तरह एक कोड बनाया:

जावा

//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
}

इसका उत्पादन करने वाले उत्पादन का उदाहरण:

मार्शमैलो v6.0, एपीआई स्तर: 23


1
जब एक से अधिक डॉट होते हैं तो यह कोड Double.parseDouble (Build.VERSION.RELEASE) पर क्रैश हो जाता है। उदाहरण के लिए
tes.१.१

@ MiklósKeresztes जानकारीपूर्ण टिप्पणी के लिए धन्यवाद - मैंने अपना उत्तर निर्धारित कर दिया है।
निकिता कुर्तिन

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

क्या आप कृपया अपने समाधान के बारे में थोड़ा और विवरण जोड़कर अपने उत्तर को विस्तृत कर सकते हैं?
अबरिसोन

3

इस वर्ग का उपयोग करें

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

इस विधि का उपयोग करें:

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

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

यह कैसे मदद करेगा?
शमूएल ओविनो

1

bashआपके Android डिवाइस पर आपके द्वारा दिए गए , आप इस बैश फ़ंक्शन का उपयोग कर सकते हैं:

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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.