开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜