প্রোগ্রামগতভাবে অ্যান্ড্রয়েড এপিআই সংস্করণ পুনরুদ্ধার করা


581

ফোনটি বর্তমানে চলছে এমন এপিআই সংস্করণ পাওয়ার কী কোনও উপায় আছে?


62
@ স্টিভহ্যালি আমরা সাধারণত বিবেচনা করি যে প্রথম যে জিনিসটি আসে তা হ'ল পরে প্রদর্শিত কোনও জিনিসের সদৃশ নয়।
আরডিএস

উত্তর:


1066

অ্যান্ড্রয়েড ডকুমেন্টেশনে বর্ণিত হিসাবে, ফোনটি যে SDK স্তর (পূর্ণসংখ্যা) চলছে সেগুলি এখানে উপলব্ধ:

android.os.Build.VERSION.SDK_INT

এই int এর সাথে সম্পর্কিত android.os.Build.VERSION_CODESক্লাসটি ক্লাসে রয়েছে।

কোড উদাহরণ:

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
}

সম্পাদনা করুন : এই এসডিকেটিপিটি ডোনট (অ্যান্ড্রয়েড 1.6 / এপিআই 4) এর পরে উপলব্ধ তাই আপনার অ্যাপ্লিকেশন কাপকেকে (অ্যান্ড্রয়েড 1.5 / এপিআই 3) এর সাথে পূর্বের সাথে সামঞ্জস্যপূর্ণ নয় তা নিশ্চিত করুন বা আপনার অ্যাপ্লিকেশনটি ক্রাশ হয়ে যাবে (যথাযথতার জন্য প্রোগ্রামার ব্রুসকে ধন্যবাদ) ।

সংশ্লিষ্ট অ্যান্ড্রয়েড ডকুমেন্টেশন এখানে এবং এখানে রয়েছে is


18
কোডটি যদি 1.5 তে চলমান থাকে, তবে এসডিকে.এনপিটি রেফারেন্সিং ব্যতিক্রম করবে, যেহেতু এটি এপিআই 4 এর সাথে প্রবর্তিত হয়েছিল। , এটি একটি ব্যতিক্রম ছুঁড়ে
প্রোগ্রামার ব্রুস

@ প্রোগ্রামার ব্রুস কীভাবে দুর্ঘটনা রোধ করবেন? বা কীভাবে বিপরীতমুখী হতে হবে না ?
Cœur

1
@ সিউর আমি মনে করি অ্যান্ড্রয়েড 1.5 এর সাথে সামঞ্জস্যপূর্ণ একটি অ্যাপ রেট্রো নির্মাণ আজকাল সত্যিই কার্যকর নয়। শুধু তোমার প্রকল্প সেট minSdkVersionকরার 4(অ্যান্ড্রয়েড 1.6) এবং যান।
#_v_er

তার পরিবর্তে স্ট্রিং android.os.Build.VERSION.SDK ব্যবহার করবেন না কেন ? এটি সমস্ত অ্যান্ড্রয়েড সংস্করণগুলির জন্য কাজ করে
PYK

@PYK এই অ্যাট্রিবিউটটি android.os.Build.VERSION.SDK অবমূল্যায়িত হয়েছে, তাই এটি ব্যবহার করা উচিত নয়। বিকাশকারী.অ্যান্ড্রয়েড.
com

146

খুব সহজ:

   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

2
বিল্ড.ভেরিশন.আরলেসই আমি যা খুঁজছিলাম। ধন্যবাদ @ কমনসেন্সকোড
axierjhtjz

81
Build.VERSION.RELEASE;

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

এটি ব্যবহার করতে, আপনি কেবল এটি করতে পারেন;

String androidOS = Build.VERSION.RELEASE;

9
ডক্স অনুসারে int android.os.Build.VERSION.SDK_INTএবং public static final int SDK_INTএবং Added in API level 4কীভাবে (পূর্ণসংখ্যার নয়) ফিরে আসতে পারে NULL? NULLতাই তার নির্মান অথবা সংস্করণ হতে পারে একটি বস্তুর জন্য একটি রাষ্ট্র nullতাত্ত্বিকভাবে কিন্তু এই ধরনের ক্ষেত্রে না শুধুমাত্র SDK_INTকিন্তু RELEASEসেইসাথে একটি NPE কারণ হবে। এসডিকে.এনপিটি সম্ভবত "এ জাতীয় কোনও পদ্ধতি ব্যতিক্রম নয়" বা এর মতো কিছু হতে পারে তবে নাল বা এনপিই নয়। যদি কেবল কাস্টম রম ডক্স এবং পদ্ধতি হিসাবে ঘোষিত হয় public static final Integer SDK_INT। আমি কেবল একটি সমস্যার সমাধান করার জন্য কোনও সমস্যার প্রকৃতি নির্ধারণ করার চেষ্টা করছি।
স্ট্যান

3
আসলে ঘটনাটি কি কেউ তা যাচাই করতে পারে? স্ট্যানের মন্তব্য এটি পরিষ্কার করে দিয়েছে যে নাল সম্ভব নয়। এবং কাস্টম অ্যান্ড্রয়েড রমের / ওএসের অবশ্যই সংস্করণটির কিছু বিল্ড থেকে উদ্ভূত হতে হবে? সুতরাং অবশ্যই বিল্ড। ভার্সন.এসডি কে.এন.পি. এর প্রতিফলিত হওয়া উচিত?
বিটি

3
আমি দাবিটি সত্যই ব্যাক আপ না করায় এবং এ সম্পর্কে সতর্কবার্তাটি কার্যকর হয় না বলে আমি এটিকে অগ্রাহ্য করেছি null
স্যাম

রুটযুক্ত ফোন বা কাস্টম রমগুলির এই নম্বরটি কখনই স্পর্শ করা উচিত নয়। যদিও তারা সাধারণত বিল্ড। VERSION.RELEASE পরিবর্তন করে।
ফুয়াহ ইয়ে কিট

এটি কাস্টম ওএস / রোমের ক্ষেত্রে প্রচুর জ্ঞাত সমস্যা রয়েছে। আমার পুরানো অ্যান্ড্রয়েডে আমার যে সংস্করণটি ছিল সেই সময়ে (আমি জিএস 3 বলতে চাই) এতে সমস্যা ছিল। হার্ডকোডযুক্ত মান বা মানগুলি এখানে সঠিক ছিল না এমন অনেকগুলি সমস্যা রয়েছে। হার্ড উদাহরণ, Wi-Fi ম্যাক অ্যাড্রেসগুলি হার্ড কোডেড।
ফ্যালকন 165o

31

আমলে নিয়ে সমস্তই বলেছে, ডিভাইসে ফ্রয়েও বা আরও নতুন অ্যান্ড্রয়েড ওএস (২.২+) রয়েছে কিনা তা সনাক্ত করার জন্য আমি এখানে কোডটি ব্যবহার করছি:

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

স্পষ্টতই, আপনি জেনেরিক চেকারের প্রয়োজনে অ্যান্ড্রয়েডের 1.0 এবং 1.5 সংস্করণ বিবেচনার জন্য শর্তটি বিবেচনা করলে আপনি এটি সংশোধন করতে পারেন can আপনি সম্ভবত এরকম কিছু দিয়ে শেষ করবেন:

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

কোড আপনার জন্য কাজ করে না কিনা তা আমাকে জানান।



9

android.os.Build.VERSION.SDK আপনাকে API স্তরের মান দিতে হবে। অ্যান্ড্রয়েড ডকুমেন্টেশনে আপনি এপিআই স্তর থেকে অ্যান্ড্রয়েড সংস্করণে ম্যাপিং সহজেই খুঁজে পেতে পারেন। আমি বিশ্বাস করি, 8 টি 2.2 এর জন্য 7, 2.1 এর জন্য 7 এবং আরও অনেক কিছু।


এই পদ্ধতিটি হ্রাস করা হয়।
আদি

4

বুঝেছি. getApplicationInfo()এটি Contextক্লাসের পদ্ধতিটি ব্যবহার করে ।


1
এটি আপনাকে APK এর minSdkVersion এবং लक्ष्यSdkVersion পাবে, যা অ্যাপ্লিকেশনটি কোন API সংস্করণকে সমর্থন করে তা বর্ণনা করে। এটি অ্যাপটি বর্তমানে চলছে এমন ফোনের এপিআই সংস্করণ নয়।
ওল্ডস্কুল 4664

2

SDK.INT অ্যান্ড্রয়েড 1.6 এবং তার বেশি আপের জন্য সমর্থিত

এসডিকে সমস্ত সংস্করণের জন্য সমর্থিত

সুতরাং আমি করি:

String sdk_version_number = android.os.Build.VERSION.SDK;

: থেকে ক্রেডিট CommonsWare এই উপর উত্তর


এসডিকে জাভাতে অবমূল্যায়ন করা হয়েছে।
লিমনিক

0

আমি এই সংখ্যাটির চেয়ে ভার্সনটি হ্যান্ডেল করার চেয়ে বেশি পছন্দ করি যা আমি এটি লিখেছি:

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

0

এর ওয়ার্কিং হ্যাপি কোডিং

String versionRelease = BuildConfig.VERSION_NAME;

versionRelease :- 2.1.17

দ্রষ্টব্য আপনার আমদানি প্যাকেজটি সঠিক কিনা তা নিশ্চিত করুন (আপনার অ্যাপ্লিকেশন প্যাকেজের নাম আমদানি করুন অন্যথায় এটি সঠিকভাবে কাজ করছে না)


-2

আমি ব্যবহৃত কোডটি উন্নত করেছি

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