以编程方式检索Android 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是可用的,因为甜甜圈(Android 1.6 / API4),所以确保您的应用程序不复古与Cupcake(Android 1.5 / API3)兼容,当您使用它或您的应用程序将崩溃(感谢程序员布鲁斯的精度) 。

相应的android文档在这里和这里

 Build.VERSION.RELEASE; 

这会给你你的版本的实际数字; 又名2.3.3或2.2。 使用Build.VERSION.SDK_INT的问题是,如果你有一个固定的电话或自定义的ROM,你可以有一个没有标准的操作系统(又名我的android运行2.3.5),并将返回null时使用Build.VERSION.SDK_INT所以Build.VERSION.RELEASE无论如何都可以工作!

要使用它,你可以这样做;

 String androidOS = Build.VERSION.RELEASE; 

好简单:

  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 

考虑到所有说,这里是我用来检测如果设备有Froyo或更新的Android操作系统(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; } } 

让我知道如果代码不适合你。

android.os.Build.VERSION.SDK应该给你的API级别的价值。 你可以在android文档中轻松find从api级别到android版本的映射。 我相信,8是2.2,7是2.1,依此类推。

尝试这个:

  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) { // only for gingerbread and newer versions } 

得到它了。 它使用Context类的getApplicationInfo()方法。

我更喜欢把版本作为编号比我写的更简单:

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