क्या एपीआई संस्करण प्राप्त करने का कोई तरीका है जो फोन वर्तमान में चल रहा है?
क्या एपीआई संस्करण प्राप्त करने का कोई तरीका है जो फोन वर्तमान में चल रहा है?
जवाबों:
जैसा कि Android प्रलेखन में वर्णित है, एसडीके स्तर (पूर्णांक) जो फोन चल रहा है वह इसमें उपलब्ध है:
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
}
संपादित करें : यह SDK_INT डोनट (एंड्रॉइड 1.6 / एपीआई 4) के बाद से उपलब्ध है, इसलिए सुनिश्चित करें कि आपका आवेदन कपकेक (एंड्रॉइड 1.5 / एपीआई 3) के साथ रेट्रो-संगत नहीं है जब आप इसका उपयोग करते हैं या आपका एप्लिकेशन क्रैश हो जाएगा (सटीक के लिए प्रोग्रामर ब्रूस के लिए धन्यवाद) ।
minSdkVersion
करने के लिए 4
(एंड्रॉयड 1.6) और चले जाते हैं।
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
Build.VERSION.RELEASE;
यह आपको आपके संस्करण की वास्तविक संख्या देगा; उर्फ 2.3.3 या 2.2। Build.VERSION.SDK_INT का उपयोग करने के साथ समस्या यह है कि यदि आपके पास रूट फोन या कस्टम रोम है, तो आपके पास एक गैर मानक OS हो सकता है (aka my android 2.3.5 चल रहा है) और बिल्ड .VERS.SDK_INT का उपयोग करते समय यह अशक्त हो जाएगा। तो Build.VERSION.RELEASE कोई भी काम नहीं करेगा मानक Android संस्करण का उपयोग कर या नहीं!
इसका उपयोग करने के लिए, आप बस ऐसा कर सकते हैं;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
और public static final int SDK_INT
और Added in API level 4
कैसे int सकता है (नहीं पूर्णांक) वापसी NULL
? NULL
एक वस्तु के लिए एक राज्य है तो इसका निर्माण या संस्करण null
सैद्धांतिक रूप से हो सकता है लेकिन ऐसे मामले में न केवल SDK_INT
बल्कि RELEASE
एक एनपीई का कारण होगा। SDK_INT शायद "ऐसा कोई विधि अपवाद नहीं" या ऐसा कुछ हो सकता है, लेकिन अशक्त या NPE नहीं। यदि केवल कस्टम ROM डॉक्स और के रूप में घोषित विधि को तोड़ता है public static final Integer SDK_INT
। मैं केवल समस्या को हल करने के लिए किसी समस्या की प्रकृति निर्धारित करने का प्रयास कर रहा हूं।
null
कोई मतलब नहीं है।
सभी ने ध्यान में रखते हुए कहा, यहाँ कोड है जिसका मैं यह पता लगाने के लिए उपयोग करता हूँ कि क्या डिवाइस में Froyo या नया Android OS है (2.2+):
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 Android के संस्करणों को ध्यान में रख सकते हैं। आप शायद कुछ इस तरह से खत्म करेंगे:
// 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;
}
}
अगर कोड आपके लिए काम नहीं कर रहा है तो मुझे बताएं।
इसे इस्तेमाल करे:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
समझ गया। कक्षा की getApplicationInfo()
विधि का उपयोग करते हुए Context
।
SDK.INT एंड्रॉइड 1.6 और ऊपर के लिए समर्थित है
एसडीके सभी संस्करणों के लिए समर्थित है
इसलिए मैं करता हूँ:
String sdk_version_number = android.os.Build.VERSION.SDK;
इस जवाब पर : CommonsWare
मैं पसंद करता हूं कि संस्करण जितना मैंने लिखा है उससे अधिक आसान तरीके से संभाला जा सके।
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();
}
मैंने उपयोग किए गए कोड में सुधार किया
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;
}