2011-07-31 17 views
6

我工作的一個應用程序,針對API 11(3.0),但的minSdkVersion是7(2.1)是反映必要的。如果我使用 「如果(android.os.Build.VERSION.SDK_INT> = 11)」

我生成我PreferenceActivity編程,而不是使用XML。在Honeycomb中,首選項佈局具有內置的可放置在每個首選項旁邊的圖標。你可以用prefScreen.setIcon(R.drawable.my_icon);

設置它,所以我不想做這個API 7-10。這是否足以防止崩潰?

if (android.os.Build.VERSION.SDK_INT>=11) 
    prefScreen.setIcon(R.drawable.myIcon); 

我知道的更詳盡的解決方案是安全的是在嘗試使用它之前使用反射來檢查該方法是否存在。

回答

10

根據http://developer.android.com/training/basics/activity-lifecycle/starting.html反射,它暗示了它的安全使用SDK_INT不斷在Android 2.0及以上換到新的API的調用,而無需使用反射。

注意:使用SDK_INT防止舊系統的從執行 新的API工作在這種方式在Android 2.0只(API級別5)和更高 。舊版本會遇到運行時異常。

+2

很抱歉,如果這是不好的形式回來兩年後,改變接受的答案,但是現在這個答案是正確的。 Lint提供警告以幫助您避免調用不可用方法時發生錯誤。 – Tenfour04

1

如果該方法不可用在較低版本的平臺,當文件被系統加載它將會崩潰(它甚至不會使它到您的if語句執行)

你應該只看延遲加載的文章做在Android Dev Blog

+0

不是真的...這是我的手機運行2.2工作正常。只是不確定它是否100%安全。我會研究延遲加載,謝謝。 – Tenfour04

+0

有趣的是,我的印象是,當類加載首次所有方法進行了驗證,並會阻止那些類型'if'語句無法正常工作。無論採用哪種方式,在處理舊版平臺時,Lazy Loading都是處理這些類型歧義的更好方法。 – smith324

+0

是的,在閱讀了更多內容之後,它看起來應該在加載類時崩潰了。不知道爲什麼沒有。 – Tenfour04

2

這爲我工作:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ 
      //code 
}