RequiresApi vs TargetApi android注解

RequiresApiTargetApi什么区别?

在kotlin中的示例:

 @RequiresApi(api = Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M) class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 

注意: FingerprintManager.AuthenticationCallback需要api M

注2:如果我不使用TargetApi lint失败,错误class requires api level 23...

@RequiresApi – 表示注释的元素只能在给定的API级别或更高级别上调用。

@TargetApi – 表示Lint应该将此类型视为指定给定的API级别,而不管项目的目标是什么。

类似于Mike所说的,正如你可以在文档中看到的那样:

表示注释元素只应在给定的API级别或更高级别上调用。

这与旧的@TargetApi注解类似,但更清楚地表示这是对调用者的要求,而不是被用来在超出minSdkVersion的方法中“压制”警告。

正如你在这里看到的,这实际上是强制执行调用者来验证调用这个方法时使用的API,而不是从IDE / LINT中删除警告。

您可以将其与@NonNull或@Null注释进行比较,它们强制调用者可以/不能将空值发送到函数中。

https://developer.android.com/reference/android/support/annotation/RequiresApi.html中的JavaDocs:

[@RequiresApi]这与旧的@TargetApi注释类似,但更清楚地表示这是对调用者的要求,而不是用来在超出minSdkVersion的方法中“压制”警告。

我想他们在功能上是等价的,但@RequiresApi似乎更新,并有更多的机会扩展到包括更多的功能。

它们都是用于处理添加到新的android API级别的功能,而不会影响其他API级别。

RequiresApi

 @RequiresApi(api = Build.VERSION_CODES.*api_code*) 

这里说的是注释元素只能在给定的API级别或更高级别上调用。 给定API级别下的注释元素将不会调用。

TargetApi

 @TargetApi(Build.VERSION_CODES.*api_code*) 

指示Lint应将此类型视为指定给定的API级别,而不管项目目标是什么。 仅用于指定的API级别。 不会调用其他API级别。