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