如何針對不同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,但非常感謝 –