以编程方式检索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; }