首页 文章

以编程方式检索Android API版本

提问于
浏览
492

有没有办法获得手机当前运行的API版本?

9 回答

  • 76

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

    Edit :这个SDK_INT自Donut(android 1.6 / API4)开始提供,所以当你使用它时,确保你的应用程序与Cupcake(android 1.5 / API3)不兼容,否则你的应用程序会崩溃(感谢Programmer Bruce的精确度) .

    对应的android文档是herehere

  • 17

    非常简单:

    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
    
  • 31
    Build.VERSION.RELEASE;
    

    这将为您提供您的版本的实际数字;又名2.3.3或2.2 . 使用Build.VERSION.SDK_INT的问题是,如果你有一个root的手机或自定义ROM,你可能有一个非标准的操作系统(也就是我的android运行2.3.5),当使用Build.VERSION.SDK_INT时将返回null所以无论如何,Build.VERSION.RELEASE都能正常工作!

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

    String androidOS = Build.VERSION.RELEASE;
    
  • 0

    考虑到所有说法,这里是用于检测设备是否具有Froyo或更新Android OS(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;
        }
    }
    

    如果代码不适合您,请告诉我 .

  • 0

    试试这个:

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

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

  • 8

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

  • 4

    我更喜欢将版本作为数字,比我写的更简单:

    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();
    }
    
  • 950

    我改进了我使用的代码

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

相关问题