tags:

views:

63

answers:

3

Build.VERSION.SDK_INT was added only in API level 4 (1.6). Is it possible to determine if phone has API level 3 (1.5) ?

A: 

I would try to access that property via reflection, if it fails, you're in Android 1.5.

Chris Thompson
A: 
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;
    }
}
alex
+2  A: 

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;
        }
    }
}
Al Sutton