什么是摆脱兼容性错误的正确方法?

时间:2014-03-06 17:11:07

标签: java android compatibility

我希望能够在运行Android级别7的设备上使用该应用,而不使用此功能。如果设备是API级别11或更高版本,我希望此功能可用。我应该使用@SuppressLint还是@TargetApi(HONEYCOMB)?有什么区别?

enter image description here

谢谢!

3 个答案:

答案 0 :(得分:1)

@SuppressLint' NewApi' - 如果您使用的API是在您使用的最低SDK版本之后引入的,则告诉Lint忽略所有警告。如果您以后使用的API超出了HONEYCOMB(目前是运行项目所需的最低API级别),那么这可能会抑制可能出现的错误警告

@TargetApi(HONEYCOMB) - 告诉Lint将此类型视为针对给定API级别,忽略您可能提到的任何最低API级别。如果您之后引用了超出HONEYCOMB级别的API,Lint将再次发出有关此问题的警告。

除此之外,您无法在能够仅运行无法解释这些API的以前版本的Android的设备上使用更高版本的API运行应用程序。虽然应用程序可能正确加载,但当它看到对此API的调用时会崩溃,因为该版本的Android无法理解预期会执行的操作。您可以在HONEYCOMB级别或更高级别的设备上运行它而不会出现问题。如果您想在以前的版本上运行这些应用程序,您可能需要考虑使用支持库(如果可用)。

答案 1 :(得分:1)

您想使用TargetApi。原因是SuppressLint("NewApi")将吞下所有lint错误,而不仅仅是你使用API​​级别11。

假设您稍后使用API​​级别12.使用TargetApi,您将收到一条新警告,以便您可以采取行动。使用SuppressLint("NewApi")您将无法获得任何结果。最好明确禁用警告,而不是永远禁用警告。

答案 2 :(得分:1)

使用TargetApi,告诉编译器您确定除非满足API要求,否则永远不会调用此类/方法/任何内容。

这就是你想要做的。但这也意味着您必须确保在此级别的API下永远不会调用此类。你可以使用

来做到这一点
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // Call that class
} else {
    // Call another class
}