3

我正在爲Android構建一個應用程序,但我想這樣做,所以我可以使用4.0.3功能作爲最低限度。對於那些使用4.0及以下版本的用戶,我目前並不擔心這個問題。如何使ICS應用程序(API 15)與Jellybean(API 16)兼容?

基本上,我的問題如下:

  • 如果我已經有了一個與基地在Eclipse SDK最低設置爲4.0.3的一個項目,以最高設置爲相同的,我可以改變最大?如果是這樣,怎麼樣?

  • 4.0.3應用程序是否與4.1應用程序兼容?如果沒有,這是一個很好的解決方法?如果我在C/C++中這樣做,答案將是預處理器指令(例如,#ifdef ANDROID_OS_4_1 //do stuff for 4.1 only #endif)。我知道Java中沒有這樣的等價物,但更不用說Android。

回答

4

要建立對豆形軟糖,您可以使用<uses-sdk />標籤中您的AndroidManifest(正好在您的<application />標記上方):

<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="16"/> 

通過使用16(豆形軟糖)的targetSdkVersion您可以訪問所有的新API的

在運行時,那麼你可以檢查應用程序正在運行的Android版本,並執行基於關閉該行爲。我用一個實用工具類在我的應用程序要做到這一點:

public class Api { 
    public static final int LEVEL = Build.VERSION.SDK_INT; 
    public static final int FROYO = Build.VERSION_CODES.FROYO; 
    public static final int GINGERBREAD = Build.VERSION_CODES.GINGERBREAD; 
    public static final int GINGERBREAD_MR1 = Build.VERSION_CODES.GINGERBREAD_MR1; 
    public static final int HONEYCOMB = Build.VERSION_CODES.HONEYCOMB; 
    public static final int ICS = Build.VERSION_CODES.ICE_CREAM_SANDWICH; 
    public static final int JELLYBEAN = Build.VERSION_CODES.JELLY_BEAN; 

    public static boolean isMin(int level) { 
     return LEVEL >= level; 
    } 
} 

然後在你的代碼,你可以做這樣的事情:

if(Api.isMin(Api.JELLYBEAN)) 
    doJellybeanStuff(); 
else if(Api.isMin(Api.ICS)) 
    doIcsStuff(); 
else 
    doOldStuff(); 
+0

只是注意那些生成版本代碼編譯時間常數,所以即使在老版本的Android上也可以安全使用 – DanielGrech

+0

輝煌。非常非常感謝你。 – zeboidlund

1

您可以通過使用

int SDK_INT = android.os.Build.VERSION.SDK_INT; 

獲得的版本,您可以檢查版本之前設置參數

if(SDK_INT < 16) { 
    someAPIInLowerVersions(); 
} else { 
    someJBApi(); 
} 
相關問題