2012-05-11 24 views
18

मैं इसएंड्रॉइड: एंड्रॉइड संस्करण नाम प्रोग्रामेटिक रूप से कैसे ढूंढें?

स्ट्रिंग संस्करण = Build.VERSION.RELEASE जैसे एंड्रॉइड संस्करण को खोजने के लिए कोड लिखता हूं;

इस कोड का उपयोग करके मुझे संस्करण संख्या मिल गई है, लेकिन मुझे संस्करण का नाम चाहिए। कैसे संस्करण का नाम पाने के लिए ???/

उत्तर

47

जैसा कि पहले सुझाव दिया गया था, प्रतिबिंब इस प्रश्न की कुंजी प्रतीत होता है। स्ट्रिंगबिल्डर और अतिरिक्त स्वरूपण की आवश्यकता नहीं है, इसे केवल उपयोग को चित्रित करने के लिए जोड़ा गया था।

import java.lang.reflect.Field; 
... 

StringBuilder builder = new StringBuilder(); 
builder.append("android : ").append(Build.VERSION.RELEASE); 

Field[] fields = Build.VERSION_CODES.class.getFields(); 
for (Field field : fields) { 
    String fieldName = field.getName(); 
    int fieldValue = -1; 

    try { 
     fieldValue = field.getInt(new Object()); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 

    if (fieldValue == Build.VERSION.SDK_INT) { 
     builder.append(" : ").append(fieldName).append(" : "); 
     builder.append("sdk=").append(fieldValue); 
    } 
} 

Log.d(LOG_TAG, "OS: " + builder.toString()); 

मेरी 4.1 एमुलेटर पर, मैं इस उत्पादन प्राप्त करें:

D/MainActivity(1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16 

का आनंद लें!

+3

के लिए देख रहे हैं, यह नामों की अपनी स्थिर सरणी का उपयोग करने और इसे इंडेक्स द्वारा देखने के लिए आसान और सुरक्षित होगा। – CommonsWare

+4

एक स्थिर सरणी एक ऐप के लिए आदर्श हो सकती है जिसे प्रत्येक रिलीज के लिए नियमित रूप से अपडेट किया जा सकता है, लेकिन उन परियोजनाओं के लिए जिन्हें एंड्रॉइड की कई रिलीज के लिए अपडेट नहीं किया जा सकता है, यह अभी भी एक पसंदीदा समाधान हो सकता है। –

3

आप इन

android.os.Build.VERSION_CODES 

android.os.Build.VERSION.SDK_INT 

अधिक जानकारी इस लिंक से किया जा सकता है से जानकारी मिल जाएगी:

Retrieving Android API version programmatically

आशा इस वसीयत आपकी मदद।

5

http://developer.android.com/reference/android/os/Build.VERSION_CODES.html ऐसे फ़ील्ड हैं जिनके नाम आप ढूंढ रहे हैं। तो आप यह पता लगाने के लिए रिफ्लेक्सियन का उपयोग कर सकते हैं कि कौन सा फ़ील्ड "संस्करण" मान से मेल खाता है।

आप नाम क्यों चाहते हैं?

+0

के एक संकर जवाब के साथ आने पर चल रहा है क्लाइंट आवश्यकता को अपने मोबाइल – Venkat

+0

का संस्करण संख्या और संस्करण नाम प्राप्त करना है, तो शायद सबसे अच्छा संभवतः Build.VERSION.SDK_INT को अपने सर्वर पर भेजने के लिए है और फिर उस int से उस नाम से मैपिंग करें जिसे आप अपने ग्राहकों को देना चाहते हैं। –

+0

तो संस्करण नाम प्राप्त करने का कोई सीधा तरीका नहीं है ???? – Venkat

3

इस की जाँच करें:

// Names taken from android.os.build.VERSION_CODES 
String[] mapper = new String[] { 
    "ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT", 
    "ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD", 
    "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2", 
    "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN" 
}; 
int index = Build.VERSION.SDK_INT - 1; 
String versionName = index < mapper.length? mapper[index] : "UNKNOWN_VERSION"; // > JELLY_BEAN) 

ध्यान रखें कि यह समाधान केवल जहाँ तक काम करेंगे के रूप में संस्करण कोड एक के बाद वृद्धि की जा रही रखना, और आप प्रत्येक नए एंड्रॉयड संस्करण के साथ सूची अद्यतन करना होगा (अगर सटीक होना महत्वपूर्ण है)।

+5

तो क्या, प्रत्येक और नए एंड्रॉइड संस्करण को आपको इस सरणी को कमजोर करना होगा, कमजोर। –

1

एंड्रॉयड दस्तावेज में बताया गया है, एसडीके स्तर (पूर्णांक) फोन चल रहा है में उपलब्ध है:

android.os.Build.VERSION.SDK_INT;

इस int से संबंधित enum android.os.Build.VERSION_CODES कक्षा में है।

कोड उदाहरण:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
if (currentapiVersion >= android.os.Build.VERSION_CODES.FROYO){ 
    // Do something for froyo and above versions 
} else{ 
    // do something for phones running an SDK before froyo 
} 

संपादित करें: यह SDK_INT डोनट (एंड्रॉयड 1.6/API4) के बाद से उपलब्ध है तो सुनिश्चित करें कि आपके आवेदन Cupcake (एंड्रॉयड 1.5/API3) के साथ रेट्रो-संगत नहीं है जब आप इसे उपयोग कर या आपका आवेदन दुर्घटनाग्रस्त हो जाएगा (परिशुद्धता के लिए प्रोग्रामर ब्रूस के लिए धन्यवाद)।

9

अनुकूलित कोड, इस काम करेगा:

import java.lang.reflect.Field; 

Field[] fields = Build.VERSION_CODES.class.getFields(); 
String osName = fields[Build.VERSION.SDK_INT + 1].getName(); 
Log.d("Android OsName:",osName); 
0

import java.lang.reflect.Field; Field[] fields = Build.VERSION_CODES.class.getFields(); String osName = fields[Build.VERSION.SDK_INT + 1].getName();

इस कोड काम करेंगे। फिर, ओएसनाम वैरिएबल का उपयोग करें, हालांकि आप चाहते हैं।

-1

आप फ़ंक्शन का पालन करने का प्रयास कर सकते हैं।

public String AndroidOSName() { 
    String os = Build.VERSION.SDK; 
    System.out.println("here is my os" + " " + os); 
    if (os.equals("23")) { 
     return "Marshmallow"; 
    } else if (os.equals("21")) { 
     return "Lollipop"; 
    } else if (os.equals("22")) { 
     return "LOLLIPOP_MR1"; 
    } else if (os.equals("20")) { 
     return "KitKat"; 
    } else if (os.equals("19")) { 
     return "KitKat"; 
    } else if (os.equals("18")) { 
     return "Jelly Bean"; 
    } else if (os.equals("17")) { 

     return "Jelly Bean"; 
    } else if (os.equals("16")) { 
     return "Jelly Bean"; 
    } else if (os.equals("15")) { 
     return "Ice Cream Sandwich"; 
    } else if (os.equals("14")) { 
     return "Ice Cream Sandwich"; 
    } else if (os.equals("13")) { 
     return "Honeycomb"; 
    } else if (os.equals("12")) { 
     return "Honeycomb"; 
    } else if (os.equals("11")) { 
     return "Honeycomb"; 
    } else if (os.equals("10")) { 
     return "Gingerbread"; 
    } else if (os.equals("9")) { 
     return "Froyo"; 
    } else if (os.equals("8")) { 
     return "Froyo"; 
    } else { 
     return "Not Found"; 
    } 

} 
+3

कृपया ध्यान दें कि क्या आप अपनी वेबसाइट या ब्लॉग को बढ़ावा देना चाहते हैं, ** आपको उत्तर में अपने संबद्धता का खुलासा करना होगा **। अन्यथा, आपका उत्तर स्पैम के रूप में फ़्लैग किया जा सकता है। कृपया पढ़ें [स्पैमर कैसे नहीं बनें] (https://stackoverflow.com/help/promotion)। – iBug

0

प्रतिबिंब काम नहीं कर रहा है जब मैं एमुलेटर में की कोशिश की है एपीआई 19.

तो मैं "नाचो Coloma" और "केविन अनुदान"

String osName=""; 
Field[] fields = Build.VERSION_CODES.class.getFields(); 
for (Field field : fields) { 
    String fieldName = field.getName(); 
    int fieldValue = -1; 

    try { 
     fieldValue = field.getInt(new Object()); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 

    if (fieldValue == Build.VERSION.SDK_INT) { 
     osName=fieldName; break; 
    } 
} 
if(osName.isEmpty()) { 
    String[] mapper = new String[]{ 
      "ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT", 
      "ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", 
      "GINGERBREAD", "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", 
      "HONEYCOMB_MR2", "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN", 
      "JELLY_BEAN", "JELLY_BEAN", "KITKAT", "KITKAT", 
      "LOLLIPOOP", "LOLLIPOOP_MR1", "MARSHMALLOW", "NOUGAT", 
      "NOUGAT", "OREO", "OREO", "ANDROID P"}; 
    int index = Build.VERSION.SDK_INT - 1; 
    osName = index < mapper.length ? mapper[index] : "UNKNOWN_VERSION"; 
} 
संबंधित मुद्दे