Define API Level for Platforms <1.6

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

+3
source share
4 answers
 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; } } 
+1
source

You can use Build.VERSION.SDK, which returns String and is available for all versions of Android up to 1.6. It is marked as deprecated, so you should use reflection to make sure your application does not encounter problems in future versions of Android.

So, to ensure that all versions are <1.6, you can 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; } } } 
+3
source

Since this is all about static fields, it's a little easier to do, 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; } } } 
+1
source

I would try to access this property through reflection, if it failed, you are in Android 1.5.

0
source

Source: https://habr.com/ru/post/1387431/


All Articles