2014-03-06 52 views
0

我希望能夠在沒有此功能的情況下在運行Android 7級的設備上使用該應用。如果設備的API級別爲11或更高,我希望此功能可用。我應該使用@SuppressLint還是@TargetApi(HONEYCOMB)以及有什麼區別?擺脫兼容性錯誤的正確方法是什麼?

enter image description here

謝謝!

回答

1

使用TargetApi,你告訴編譯器,你是肯定該類/方法/任何永遠不會被調用,除非符合API要求。

這就是你想要做的。但是這也意味着你必須確保這個類在這個API級別下不會被調用。您可以使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    // Call that class 
} else { 
    // Call another class 
} 
1

@SuppressLint'NewApi' - 告訴Lint忽略所有警告,如果您使用的API是在您使用的最低SDK版本之後引入的。如果您以後使用超出HONEYCOMB級別的API(這是目前運行您的項目所需的最低API級別),則這可能會抑制可能發生的錯誤警告。

@TargetApi(HONEYCOMB) - 告訴Lint將此類型視爲指定給定的API級別,忽略您可能提及的任何最低API級別。如果您後來引用超出HONEYCOMB級別的API,Lint將再次發出警告。

除此之外,您無法在只能運行以前版本的Android且無法解釋這些API的設備上使用更高版本的API來運行該應用程序。儘管應用可能會正確加載,但當它看到對此API的調用時,它會崩潰,因爲該版本的Android不明白它的期望。您可以在HONEYCOMB或更高級別的設備上運行它,而不會出現問題。如果您想在以前的版本上運行這些應用程序,則可能需要考慮使用支持庫(如果可用)。

1

您想使用TargetApi。其原因是,SuppressLint("NewApi")會吞下所有錯誤皮棉,不僅您使用API​​級別11

比方說,你以後使用API​​級別12. TargetApi您將收到一個新的警告,這樣你就可以採取行動。用SuppressLint("NewApi")你不會得到任何東西。最好禁用警告,而不是永遠禁用它們。