在运行时检查Android构建项目的目标API级别

12

我有一个应用程序,在API 18或19上运行时表现不同,这不是问题,我知道为什么会发生。

然而,我想编写一段代码,可以处理这两个版本。

有没有办法在运行时获得我的应用程序是使用哪个API构建的?具体来说,如果我使用这些API构建我的应用程序,我想获取18或19。

编辑

这似乎是一个重复的问题。我以为BUILD_VERSION是另外一件事,因为当我将两个版本编译成API 18和19,并打印版本时,我收到的版本号是18。看起来是另外一个问题(尽管我指定了API 19,但它是根据18进行编译的)。

我发现问题在于模拟器配置。

4个回答

23

我没有完全理解你的问题。但是,如果你想检查你的应用程序正在运行哪个版本的构建,并相应地采取行动,则可以使用以下方法。

if(Build.VERSION.SDK_INT == 18 ){
    // Do some stuff
}
else if (Build.VERSION.SDK_INT == 19) {
    // Do some stuff
}
else{
    // Do some stuff
}

2
Android文档提供了一些如何有效加载位图的示例代码,处理了这个问题。
该代码在一个名为Utils 的类中定义了静态方法,并在需要知道应用程序所运行的平台时进行引用。这样做的好处是,可以重复使用函数调用,而不是反复重写冗长的条件语句。该代码如下:
public static boolean hasFroyo() {
    // Can use static final constants like FROYO, declared in later versions
    // of the OS since they are inlined at compile time. This is guaranteed behavior.
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
}

public static boolean hasGingerbread() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;
}

public static boolean hasHoneycomb() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}

public static boolean hasHoneycombMR1() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1;
}

public static boolean hasJellyBean() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
}

public static boolean hasKitKat() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}

1
android.os.Build.VERSION.SDK_INT

1

请查看此链接

构建版本代码

因此,您可以按以下方式使用...

int thisDevicesApi =Build.VERSION.SDK_INT;

if (thisDevicesApi <=Build.VERSION_CODES.GINGERBREAD) { 
     //for example
    //do something
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接