আমি কীভাবে অ্যান্ড্রয়েডের সিস্টেম সংস্করণটি পরীক্ষা করতে পারি?


494

কেউ কি জানেন আমি কেমন সিস্টেমের সংস্করণ পরীক্ষা করতে পারবেন না (যেমন 1.0, 2.2ইত্যাদি) programatically?


অ্যান্ড্রয়েড স্টুডিওতে এই চেকটি যুক্ত করার জন্য কি শর্টকাট (কোড স্নিপেট বা লাইভ টেম্পলেট) রয়েছে
বাশির আল-মোমনি

উত্তর:


420

চেক android.os.Build.VERSION

  • CODENAME: বর্তমান বিকাশের কোডনাম, বা স্ট্রিং "REL" যদি এটি একটি রিলিজ বিল্ড হয়।
  • INCREMENTAL: অন্তর্নিহিত উত্স নিয়ন্ত্রণ ব্যবহার করে অভ্যন্তরীণ মানটি এই বিল্ডটিকে উপস্থাপন করতে।
  • RELEASE: ব্যবহারকারী-দৃশ্যমান সংস্করণ স্ট্রিং।

72
এটি ব্যবহার করার জন্য কোনও উদাহরণ?
জনাথন

1
এ সম্পর্কে কঠোর অংশটি হ'ল এসডি কেএনপিটিটি এপিআই লেভেল 4 এ সংজ্ঞায়িত করা হয়েছে এবং এটি ব্যবহার করা 1-3- এ ব্যর্থ হয়। কেউ কি সুন্দরভাবে এটি মোকাবেলা করতে জানেন?
জোর্ডিড

এসডিকে এপিআই 1-এর পরে উপলব্ধ, সমস্ত সংস্করণের জন্য অনিয়মিতও উপলব্ধ।
নুয়াল

1
বিল্ড। ভার্সন.আরলএইস একটি স্ট্রিং, সুতরাং আপনি নিজের পছন্দ মতো এই স্ট্রিংটি ব্যবহার করতে পারেন।
পাইগো

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 এর চেয়ে পুরানো কোনও সংস্করণকে সম্পূর্ণভাবে উপেক্ষা করি এবং খুব শীঘ্রই আমরা ২.১ এর জন্য সমর্থনও বন্ধ করে দিই। তবে আপনি এসডিকেএনপিটির পরিবর্তে এসডিকে ব্যবহার করতে পারেন।
এটিম

12
এসডিকে এপিআই স্তরে প্রেরণ করা হয়েছিল instead পরিবর্তে এসডিকেএনপিটি ব্যবহার করুন।
এরডোমিস্টার

আমার একটি প্রশ্ন রয়েছে: এটি যদি জিঙ্গারব্রেডের চেয়ে পুরানো কোনও সিস্টেমে চলতে থাকে তবে আমরা অ্যান্ড্রয়েড.ওস.বিল্ড. ভার্সন_কোডেস.জিংবারব্রেড পেতে পারি না, অ্যাপটি কি ক্রাশ হবে?
হংকচাউজং

না, কারণ জিঙ্গারব্রেড জাভা বিল্ড চলাকালীন কেবল সংখ্যা দ্বারা প্রতিস্থাপিত হবে। এটি কেবলমাত্র অ্যান্ড্রয়েডের বৃহত সংকলন সংস্করণ ব্যবহার করা প্রয়োজন।
এটিম

97

বিল্ড. ভার্সন এই ডেটাতে যাওয়ার জায়গা। কীভাবে এটি ফর্ম্যাট করা যায় তার জন্য এখানে একটি কোড স্নিপেট।

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

এই "অ্যান্ড্রয়েড এসডিকে: 19 (4.4.4)" দেখে মনে হচ্ছে


63
Build.VERSION.RELEASE;

এটি আপনাকে আপনার সংস্করণের আসল সংখ্যা দেবে; ওরফে 2.3.3 বা 2.2। বিল্ড.ও ভার্সন.এসডি কে.এন.টি. ব্যবহার করে সমস্যাটি হ'ল যদি আপনার কাছে কোনও রুটযুক্ত ফোন বা কাস্টম রম থাকে তবে আপনার কোনও মানক OS নেই (ওরফে আমার অ্যান্ড্রয়েড ২.৩.৫ চলছে) এবং বিল্ড.ভি.এস.আর.এস.এন.ডি.পি.টি ব্যবহার করার সময় তা বাতিল হয়ে যাবে will সুতরাং বিল্ড। ভার্সন.রিলএইএস যাই হোক না কেন কাজ করবে!


এসডিকে থেকে: "ব্যবহারকারী-দৃশ্যমান সংস্করণ স্ট্রিং Eg উদাহরণস্বরূপ," 1.0 "বা" 3.4 বি 5 "। .... "3.4b5" আমি কোন সংস্করণ নম্বর এটি কীভাবে নির্ধারণ করতে পারি?
ডেভস

পুরো উত্তর ২.৩.৩ হ'ল সংস্করণ নম্বর, বা ২.২, বা ২.৩.৫ (আমার ক্ষেত্রে কাস্টম রোম)। এটি সামগ্রিকভাবে ওএস সংস্করণ নম্বর।
ফ্যালকন 165o

এটি একই জিনিসটি মেনু >> সেটিংস >> ফোন সম্পর্কে ফেরত দেয়। এটি ফার্মওয়্যার সংস্করণ বা এটি প্রভাবিত করে এমন কিছু লেবেলযুক্ত হওয়া উচিত।
ফ্যালকন 165o

58
কীভাবে কোন ইন্টি একটি নাল ফেরত দিতে পারে? SDK_INT একটি আদিম অন্তর্ভুক্ত।
জসোল্ট সাফরানি

57

ডিভাইস সংস্করণ যা মার্শমেলোর চেয়ে বড় বা সমান, তা পরীক্ষা করার জন্য, এই কোডটি ব্যবহার করুন।

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

    }

অন্যকে সেকেন্ড করার জন্য কেবল ভার্সন_কোডেসের মতো পরিবর্তন করুন
,
কেটকাটের জন্য কে, নওগাতের জন্য ললিপপ এন এর জন্য এবং আরও অনেক কিছু ...


48

আপনি খুঁজছেন অ্যান্ড্রয়েড সংস্করণ জানতে পারেন Build.VERSION

ডকুমেন্টেশন আপনাকে Build.VERSION.SDK_INTমানগুলির মধ্যে পরীক্ষা করার পরামর্শ দেয় Build.VERSION_CODES

এটি ঠিক আছে যতক্ষণ না আপনি বুঝতে পেরেছেন যে Build.VERSION.SDK_INTকেবলমাত্র এপিআই লেভেল 4 এ প্রবর্তিত হয়েছিল, যা অ্যান্ড্রয়েড 1.6 (ডোনাট) বলে। সুতরাং এটি আপনাকে প্রভাবিত করবে না, তবে আপনি যদি নিজের অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড 1.5 এ বা তার আগে চালাতে চান তবে তার পরিবর্তে আপনাকে হতাশাকে ব্যবহার করতে Build.VERSION.SDKহবে।


30

আমি উত্তরগুলিতে মন্তব্য করতে পারছি না, তবে কৌশিকের উত্তরে একটি বিশাল ভুল রয়েছে: এসডিকেএনপিটি সিস্টেম সংস্করণ হিসাবে একরকম নয় তবে আসলে এপিআই স্তরকে বোঝায়।

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 ডোনোটের এপিআই স্তর ( Build.VERSION_CODES.DONUTসমান 4)।

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

এই উদাহরণটি 'ম্যাজিক নম্বর' ব্যবহার করা খারাপ অভ্যাসের কারণ reason


7
প্রকৃতপক্ষে, বিল্ড.ভি.এস.আর.কি.এন.ডি.টি এপিআই স্তর, সংস্করণ কোড নয়। সুতরাং যথাযথ লাইনটি হবেif(Build.VERSION.SDK_INT >= 15){
এরডোমিস্টার

যদি আমি আপনাকে সংস্করণ কোডটি এপিআই লেভেলের সমান এবং আইসিE_CREAM_SANDWICH এর SDK_INT 14 নয় 15? @ এরডোমাস্টার
পেরোডে

19

উদাহরণস্বরূপ, কোনও বৈশিষ্ট্য কেবল এপিআই 21-র জন্য কাজ করে যা নীচে আমরা এপিআই 21-তে বাগগুলি স্থির করি

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

19

সচেতন থেকো বিল্ড.ভর্জিশন.এসডি কে.এন.পি নির্ভরযোগ্য নয়, এটি @ ফ্যালকান ১o65o দ্বারা উল্লেখ করা হয়েছে এবং সম্প্রতি আমি এটিতেও এসেছি।

সুতরাং স্ট্রিং ডেটা পেতে (উপর ভিত্তি করে) বর্তমানে ইনস্টল হওয়া অ্যান্ড্রয়েডের অ্যান্ড্রয়েড সংস্করণ তালিকার ) পেতে, আমি এই জাতীয় কোড তৈরি করেছি:

জাভা

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

এটি উত্পাদিত একটি আউটপুট উদাহরণ:

মার্শম্যালো ভি 6.0, এপিআই স্তর: 23


1
এই কোডটি Double.parseDouble (build.VERSION.RELEASE) এ ক্র্যাশ হয়ে থাকে যখন প্রকাশে একাধিক ডট থাকে। উদাহরণস্বরূপ 7.1.1
মিক্লাস কেরেজেসেস 4:37

@ মিক্লাসক্রেসটেস তথ্যমূলক মন্তব্যের জন্য আপনাকে ধন্যবাদ - আমি আমার উত্তরটি স্থির করেছি।
নিকিতা কার্টিন

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


1

bashআপনার অ্যান্ড্রয়েড ডিভাইসে আপনার দেওয়া , আপনি এই ব্যাশ ফাংশনটি ব্যবহার করতে পারেন:

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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.