มีวิธีการรับรุ่น API ที่โทรศัพท์กำลังทำงานอยู่หรือไม่?
มีวิธีการรับรุ่น API ที่โทรศัพท์กำลังทำงานอยู่หรือไม่?
คำตอบ:
ตามที่อธิบายไว้ในเอกสารประกอบ Android ระดับ 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
}
แก้ไข : SDK_INT นี้มีให้ตั้งแต่ Donut (android 1.6 / API4) ดังนั้นตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณไม่รองรับ retro (Cupcake 1.5 / API3) ย้อนยุคเมื่อคุณใช้งานหรือแอปพลิเคชันของคุณจะทำงานผิดพลาด .
minSdkVersion
เป็น4
(Android 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;
ที่จะให้ตัวเลขจริงของรุ่นของคุณ aka 2.3.3 หรือ 2.2 ปัญหาเกี่ยวกับการใช้ Build.VERSION.SDK_INT คือถ้าคุณมีโทรศัพท์รูทหรือรอมที่กำหนดเองคุณสามารถมีระบบปฏิบัติการที่ไม่ได้มาตรฐาน (aka android ของฉันใช้งาน 2.3.5) และจะส่งคืนค่า null เมื่อใช้ Build.VERSION.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
เป็นสถานะสำหรับวัตถุดังนั้น Build หรือ VERSION อาจเป็นnull
เหตุผลทางทฤษฎี แต่ในกรณีเช่นนี้ไม่เพียงSDK_INT
แต่RELEASE
จะทำให้เกิด NPE ด้วยเช่นกัน SDK_INT อาจทำให้ "ไม่มีข้อยกเว้นวิธีการดังกล่าว" หรืออะไรทำนองนั้น แต่ไม่ใช่ null หรือ NPE 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;
}
เห็นได้ชัดว่าคุณสามารถแก้ไขได้หากเงื่อนไขที่จะต้องคำนึงถึง Android เวอร์ชัน 1.0 และ 1.5 ในกรณีที่คุณต้องการตัวตรวจสอบทั่วไป คุณอาจจะได้อะไรแบบนี้:
// 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
}
android.os.Build.VERSION.SDK ควรให้คุณค่ากับระดับ API คุณสามารถค้นหาการแมปจากระดับ API ไปเป็น Android ได้ในเอกสารประกอบ Android ฉันเชื่อว่า 8 คือ 2.2, 7 สำหรับ 2.1 และอื่น ๆ
เข้าใจแล้ว มันใช้getApplicationInfo()
วิธีการContext
เรียน
SDK.INT รองรับAndroid 1.6ขึ้นไป
SDK รองรับทุกรุ่น
ดังนั้นฉัน:
String sdk_version_number = android.os.Build.VERSION.SDK;
ให้เครดิตกับ: CommonsWareมากกว่าคำตอบนี้
ฉันชอบมีรุ่นเป็นหมายเลขที่จะ handeled easyway มากกว่าที่ฉันเขียนนี้:
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();
}
มันทำงานได้ดี
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
หมายเหตุโปรดตรวจสอบให้แน่ใจว่าแพคเกจการนำเข้าของคุณถูกต้อง (นำเข้าแพคเกจชื่อแพคเกจแอปพลิเคชันของคุณมิฉะนั้นจะทำงานไม่ถูกต้อง)
ฉันปรับปรุงรหัสที่ฉันใช้
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;
}