휴대 전화에서 현재 실행중인 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)부터 사용할 수 있으므로 사용할 때 응용 프로그램이 Cupcake (android 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;
그러면 실제 버전 번호가 표시됩니다. 일명 2.3.3 또는 2.2. Build.VERSION.SDK_INT 사용의 문제는 루팅 된 전화 또는 사용자 정의 롬이 있고 비표준 OS (일명 내 안드로이드가 2.3.5를 실행 중)를 가질 수 있으며 Build.VERSION.SDK_INT를 사용할 때 null을 반환한다는 것입니다 따라서 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
NPE의 원인이됩니다뿐만 아니라. SDK_INT는 "No such method exception"또는 이와 유사한 것이지만 null 또는 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;
}
}
코드가 작동하지 않는 경우 알려주십시오.
알았다. 클래스 의 getApplicationInfo()
메소드를 사용합니다 Context
.
SDK.INT는 Android 1.6 이상에서 지원 됩니다
SDK는 모든 버전에서 지원 됩니다
그래서 나는 :
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;
}