【发布时间】:2012-09-23 10:39:18
【问题描述】:
如何为不同的 API 级别创建具有某些版本的方法。我认为是这样的,但我不确定
@apilevel("11")
private void getR()
{
...
}
@apilevel("4")
private void getR()
{
...
}
这样做的正确方法是什么?提前致谢
【问题讨论】:
如何为不同的 API 级别创建具有某些版本的方法。我认为是这样的,但我不确定
@apilevel("11")
private void getR()
{
...
}
@apilevel("4")
private void getR()
{
...
}
这样做的正确方法是什么?提前致谢
【问题讨论】:
在这里你会找到关于这个主题的非常好的文字:
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 这样的常量值是静态放入 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(){}
}
【讨论】:
你可以使用:
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
【讨论】: