【问题标题】:how to get Android platform code-names like Honeycomb如何获得像 Honeycomb 这样的 Android 平台代号
【发布时间】:2012-10-17 05:34:05
【问题描述】:

在我的应用程序中,我想显示设备的 Android 操作系统代码名称。 即,我想在运行时从设备获取 android 操作系统代码名称,如 HoneycombGingerbread

有没有办法让这个代号刺痛自己?我想在我的应用程序的一个屏幕中显示该名称。

我可以像这样比较并对字符串进行硬编码。

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

    CodeName=”GINGERBREAD”

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

    CodeName=”Honeycom”
 }

但是如果明天有新版本发布,那我就得重新修改代码了。这就是为什么我正在寻找一些为什么要获取代码名称字符串本身而不是获取版本号的原因。

那么任何人都可以建议一些方法来获取设备的操作系统代码名称,就像我们获取操作系统版本号一样?

【问题讨论】:

标签: android android-version


【解决方案1】:

试试这个。

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();

【讨论】:

  • 所以如果有新版本发布,我在这里更改了 Codenames 枚举。我不想那样做。请查看我的编辑。
【解决方案2】:

Android 文档中没有 API 可以为您返回代号字符串。只能获取像 2.3 这样的 VERSION NUMBER,可以展示给用户。

【讨论】:

    【解决方案3】:

    为什么不使用反射?

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

    【讨论】:

      【解决方案4】:

      导入 java.lang.reflect.Field;

        Field[] fields = Build.VERSION_CODES.class.getFields();
      
        String osName = fields[Build.VERSION.SDK_INT + 1].getName();
      
        Log.d("OsName",""+osName);
      

      【讨论】:

        【解决方案5】:

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

        if (Build.VERSION.SDK_INT<Build.VERSION_CODES.GINGERBREAD) {
             // do code for device before gingerbread
        } 
        

        也可以在这里查看更多信息 - http://developer.android.com/reference/android/os/Build.VERSION.html

        编辑 - 以 int 形式获取版本号,您可以这样做

        int versionNumber = Build.VERSION.SDK_INT;
        

        然后你可以使用

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

        【讨论】:

        • 有没有办法让这个代号刺痛自己?我想在我的应用程序的一个屏幕中显示该名称。我可以像这样比较并对字符串进行硬编码。 if (Build.VERSION.SDK_INT==Build.VERSION_CODES.GINGERBREAD) { // 在姜饼之前为设备做代码 } 但是如果明天发布新版本,那么我必须再次更改代码。这就是为什么我正在寻找一些为什么要获取代码名称字符串本身而不是获取版本号的原因。
        【解决方案6】:

        已弃用的字符串 Build.VERSION.SDK 应该可以工作

        【讨论】:

        • 那个返回与Build.VERSION.SDK_INT 相同(至少在 KitKat 上)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-15
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多