如何获得像Honeycomb这样的Android平台代码名

如何获得像Honeycomb这样的Android平台代码名,android,android-version,Android,Android Version,在我的应用程序中,我想显示设备的Android操作系统代码名。 i、 e.我想在运行时从设备上获得android操作系统的代码名,如Honeycomb或Gingerbread 有没有办法让代号sting自己来?我想在我的应用程序的一个屏幕上显示这个名字 我可以这样比较并硬编码字符串 if (Build.VERSION.SDK_INT==Build.VERSION_CODES.GINGERBREAD) { CodeName=”GINGERBREAD” } else if (Buil

在我的应用程序中,我想显示设备的Android操作系统代码名。 i、 e.我想在运行时从设备上获得android操作系统的代码名,如
Honeycomb
Gingerbread


有没有办法让代号sting自己来?我想在我的应用程序的一个屏幕上显示这个名字

我可以这样比较并硬编码字符串

 if (Build.VERSION.SDK_INT==Build.VERSION_CODES.GINGERBREAD) {

    CodeName=”GINGERBREAD”

 } else if (Build.VERSION.SDK_INT==Build.VERSION_CODES.HONEYCOMB){

    CodeName=”Honeycom”
 }
但是如果明天发布新版本,那么我必须再次更改代码。这就是为什么我在寻找一些为什么获取代码名字符串本身而不是获取版本号的原因


那么,有人能建议一些方法来获取设备的操作系统代码名,就像我们获取操作系统版本号一样吗?

像这样,只需将
.gingerbrand
更改为您想要的任何内容,即
.HONEYCOMB

if (Build.VERSION.SDK_INT<Build.VERSION_CODES.GINGERBREAD) {
     // do code for device before gingerbread
} 
然后你可以使用

if (versionNumber == 2.3){
    //do code here
}

这样,只需将
.gingerbrand
更改为您想要的任何内容,即
.HONEYCOMB

if (Build.VERSION.SDK_INT<Build.VERSION_CODES.GINGERBREAD) {
     // do code for device before gingerbread
} 
然后你可以使用

if (versionNumber == 2.3){
    //do code here
}

Android文档中没有API为您返回代码名字符串。您只能获得2.3之类的版本号,可以向用户显示。

Android文档中没有API为您返回代码名字符串。您只能获得2.3之类的版本号,可以向用户显示。

试试这个

enum Codenames
{
    BASE, BASE_1,
    CUPCAKE, 
    DONUT, 
    ECLAIR, ECLAIR_MR1, ECLAIR_MR2, 
    FROYO,
    GINGERBREAD, GINGERBREAD_MR1, 
    HONEYCOMB, HONEYCOMB_MR1, HONEYCOMB_MR2,
    ICE_CREAM_SANDWICH, ICE_CREAM_SANDWICH_MR1,
    JELLY_BEAN;

    public static Codenames getCodename()
    {
        int api = Build.VERSION.SDK_INT;

        switch (api) {
        case 1:

            return BASE;
        case 2:

            return BASE_1;
        case 3:

            return CUPCAKE;
        case 4:

            return DONUT;
        case 5:

            return ECLAIR;
        case 6:

            return ECLAIR_MR1;
        case 7:

            return ECLAIR_MR2;
        case 8:

            return FROYO;
        case 9:

            return GINGERBREAD;
        case 10:

            return GINGERBREAD_MR1;
        case 11:

            return HONEYCOMB;
        case 12:

            return HONEYCOMB_MR1;
        case 13:

            return HONEYCOMB_MR2;
        case 14:

            return ICE_CREAM_SANDWICH;
        case 15:

            return ICE_CREAM_SANDWICH_MR1;
        case 16:

            return JELLY_BEAN;
        default:
            return null;
        }
    }

};
然后呢

Codenames c = Codenames.getCodename();
试试这个

enum Codenames
{
    BASE, BASE_1,
    CUPCAKE, 
    DONUT, 
    ECLAIR, ECLAIR_MR1, ECLAIR_MR2, 
    FROYO,
    GINGERBREAD, GINGERBREAD_MR1, 
    HONEYCOMB, HONEYCOMB_MR1, HONEYCOMB_MR2,
    ICE_CREAM_SANDWICH, ICE_CREAM_SANDWICH_MR1,
    JELLY_BEAN;

    public static Codenames getCodename()
    {
        int api = Build.VERSION.SDK_INT;

        switch (api) {
        case 1:

            return BASE;
        case 2:

            return BASE_1;
        case 3:

            return CUPCAKE;
        case 4:

            return DONUT;
        case 5:

            return ECLAIR;
        case 6:

            return ECLAIR_MR1;
        case 7:

            return ECLAIR_MR2;
        case 8:

            return FROYO;
        case 9:

            return GINGERBREAD;
        case 10:

            return GINGERBREAD_MR1;
        case 11:

            return HONEYCOMB;
        case 12:

            return HONEYCOMB_MR1;
        case 13:

            return HONEYCOMB_MR2;
        case 14:

            return ICE_CREAM_SANDWICH;
        case 15:

            return ICE_CREAM_SANDWICH_MR1;
        case 16:

            return JELLY_BEAN;
        default:
            return null;
        }
    }

};
然后呢

Codenames c = Codenames.getCodename();

不推荐使用的字符串
Build.VERSION.SDK
应该可以工作

不推荐使用的字符串
Build.VERSION.SDK
应该可以工作

为什么不使用反射

    String versionCodename = null;
    Field[] fields = Build.VERSION_CODES.class.getFields();
    for (int i = 0; i < fields.length; i++) {
        Field fld = fields[i];
        try {
            int val = fld.getInt(null);
            if (val == Build.VERSION.SDK_INT && fld.getName().length() > 1) {
                String fldName = fld.getName();
                versionCodename = fldName.substring(0, 1).toUpperCase() + fldName.substring(1).toLowerCase();
                break;
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
字符串versionCodename=null;
Field[]fields=Build.VERSION_code.class.getFields();
for(int i=0;i1){
字符串fldName=fld.getName();
versionCodename=fldName.substring(0,1).toUpperCase()+fldName.substring(1).toLowerCase();
打破
}
}捕获(非法访问例外e){
e、 printStackTrace();
}
}

为什么不使用反射

    String versionCodename = null;
    Field[] fields = Build.VERSION_CODES.class.getFields();
    for (int i = 0; i < fields.length; i++) {
        Field fld = fields[i];
        try {
            int val = fld.getInt(null);
            if (val == Build.VERSION.SDK_INT && fld.getName().length() > 1) {
                String fldName = fld.getName();
                versionCodename = fldName.substring(0, 1).toUpperCase() + fldName.substring(1).toLowerCase();
                break;
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
字符串versionCodename=null;
Field[]fields=Build.VERSION_code.class.getFields();
for(int i=0;i1){
字符串fldName=fld.getName();
versionCodename=fldName.substring(0,1).toUpperCase()+fldName.substring(1).toLowerCase();
打破
}
}捕获(非法访问例外e){
e、 printStackTrace();
}
}

导入java.lang.reflect.Field

  Field[] fields = Build.VERSION_CODES.class.getFields();

  String osName = fields[Build.VERSION.SDK_INT + 1].getName();

  Log.d("OsName",""+osName);

导入java.lang.reflect.Field

  Field[] fields = Build.VERSION_CODES.class.getFields();

  String osName = fields[Build.VERSION.SDK_INT + 1].getName();

  Log.d("OsName",""+osName);

检查此链接:检查此链接:是否有任何方法可以获取代码名sting本身?我想在我的应用程序中的一个屏幕上显示该名称。我可以这样比较并硬编码字符串。如果(Build.VERSION.SDK\u INT==Build.VERSION\u CODES.GINGERBREAD){//do code for device before GINGERBREAD},但是如果明天发布新版本,那么我必须再次更改代码。这就是为什么我在寻找一些为什么要获取代码名字符串本身而不是获取版本号的原因。有没有办法获取代码名字符串本身?我想在我的应用程序中的一个屏幕上显示该名称。我可以这样比较并硬编码字符串。如果(Build.VERSION.SDK\u INT==Build.VERSION\u CODES.GINGERBREAD){//do code for device before GINGERBREAD},但是如果明天发布新版本,那么我必须再次更改代码。这就是为什么我在寻找一些为什么要获取代码名字符串本身而不是获取版本号的原因。我不想让他那样做。请检查我的编辑。所以这里我已经更改了一些新版本的代码名枚举。我不想让他那样做。请查看我的编辑。其中一个返回与
Build.VERSION.SDK_INT
(至少在KitKat上)相同的内容。另一个返回与
Build.VERSION.SDK_INT
(至少在KitKat上)