针对不同API级别的不同Java方法

时间:2012-09-23 10:39:18

标签: android api methods

如何为不同的API级别创建一个包含某些版本的方法。我认为这是这样的,但我不确定

@apilevel("11")
private void getR()
{
...
}

@apilevel("4")
private void getR()
{
...
}

这样做的正确方法是什么?提前致谢

2 个答案:

答案 0 :(得分:7)

在这里你会找到关于这个主题的非常好的文字:

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

你基本上应该使用如下代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    Log.i(LOG_TAG, "At least ICS version");
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    Log.i(LOG_TAG, "At least HoneyComb version");
}
else {
    Log.i(LOG_TAG, "legacy");
}

像ICE_CREAM_SANDWICH这样的const值被静态地放入java类中,因此只要它们在编译期间可用,它们也可以在用户手机上的先前android sdk-s上使用。你不想做的是调用以前的sdk-s上没有的方法,这将以VFY例外结束。

但编写这样的代码可能很繁琐,这就是为什么最好为每个android版本创建单独的实现并访问它的思想基础接口:

interface ImplBase {
void myFunc();
};

class ICSImp implements ImplBase {
public void myFunc(){}
}

class HoneyCombImp implements ImplBase {
public void myFunc(){}
}

class LegaceImp implements ImplBase {
public void myFunc(){}
}

答案 1 :(得分:4)

您可以使用:

Integer.valueOf(android.os.Build.VERSION.SDK);

供参考,您可以在此处查看:http://developer.android.com/reference/android/os/Build.VERSION.html#SDK

对于级别本身,这里是列表:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

相关问题