如何针对不同API级别使用某些版本的方法。我认为这是这样的,但我不知道针对不同API级别的不同Java方法
@apilevel("11")
private void getR()
{
...
}
@apilevel("4")
private void getR()
{
...
}
这样做的正确方法是什么?在此先感谢
如何针对不同API级别使用某些版本的方法。我认为这是这样的,但我不知道针对不同API级别的不同Java方法
@apilevel("11")
private void getR()
{
...
}
@apilevel("4")
private void getR()
{
...
}
这样做的正确方法是什么?在此先感谢
您可以使用:
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
在这里你会在这个问题上找到非常好的文字:
http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
你basicly应该使用类似的代码如下:
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(){}
}
这是现在已经过时,我已经使用android.os .Build.VERSION.SDK_INT,但非常感谢 –