determine API level for platforms < 1.6
Build.VERSION.SDK_INT was added o开发者_StackOverflow中文版nly in API level 4 (1.6). Is it possible to determine if phone has API level 3 (1.5) ?
You can use Build.VERSION.SDK which returns a String and is available on all versions of Android prior to 1.6. It is marked as deprecated so you should use reflection to ensure that your app doesn't encounter problems on future versions of Android.
So, to ensure all versions < 1.6 are supported you could use a modified version of Alexs code;
public static int getPlatformVersion() {
try {
Field verField = Class.forName("android.os.Build$VERSION").getField("SDK_INT");
int ver = verField.getInt(verField);
return ver;
} catch (Exception e) {
try {
Field verField = Class.forName("android.os.Build$VERSION").getField("SDK");
String verString = (String) verField.get(verField);
return Integer.parseInt(verString);
} catch(Exception e) {
return -1;
}
}
}
public static int getPlatformVersion() {
try {
Field verField = Class.forName("android.os.Build$VERSION")
.getField("SDK_INT");
int ver = verField.getInt(verField);
return ver;
} catch (Exception e) {
// android.os.Build$VERSION is not there on Cupcake
return 3;
}
}
Since it is all about static fields it is a bit easier to do this as shown below:
public static int getVersion() {
try {
return Class.forName("android.os.Build$VERSION").getField("SDK_INT").getInt(null);
} catch (Exception ex) {
try {
return Integer.parseInt((String) Class.forName("android.os.Build$VERSION").getField("SDK").get(null));
} catch (Exception ex1) {
return 0;
}
}
}
I would try to access that property via reflection, if it fails, you're in Android 1.5.
精彩评论