Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RequiresApi与TargetApi android注释_Android_Android Support Library_Kotlin_Android Annotations - Fatal编程技术网

RequiresApi与TargetApi android注释

RequiresApi与TargetApi android注释,android,android-support-library,kotlin,android-annotations,Android,Android Support Library,Kotlin,Android Annotations,RequiresApi和TargetApi之间有什么区别 科特林的样本: @RequiresApi(api = Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M) class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 注意:FingerprintManager.AuthenticationCallback需要apiM 注2:如果我不使用Ta

RequiresApi
TargetApi
之间有什么区别

科特林的样本:

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

注2:如果我不使用TargetApi lint fail with error
类需要api级别23…

中的JavaDocs:

[@RequiresApi]这在目的上与旧的@TargetApi注释类似,但更明确地表示这是对调用方的要求,而不是用于在方法中“抑制”超过minSdkVersion的警告


我认为它们在功能上是等效的,但是
@RequiresApi
似乎更新了,并且有更高的机会被扩展以包含更多功能。

类似于Mike所说的,正如您在文档中看到的:

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

这在目的上与旧的@TargetApi注释类似,但更明确地表示这是对调用方的要求,而不是用于“抑制”方法中超过minSdkVersion的警告

正如您在这里看到的,这实际上是强制调用方验证调用此方法时使用的API,而不是从IDE/LINT中删除警告


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

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


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

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

RequiresApi

@RequiresApi(api = Build.VERSION_CODES.*api_code*)
在这里,它表示只应在给定的API级别或更高级别上调用带注释的元素。给定API级别下的带注释元素将不会调用

TargetApi

@TargetApi(Build.VERSION_CODES.*api_code*)
指示Lint应将此类型视为以给定的API级别为目标,而不管项目目标是什么。仅适用于指定的API级别。
不会在其他API级别调用

我首先假设您的min-api版本低于您将要调用的api,因为这就是这些注释的意义所在

@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
当一个方法用这个注释时,无论何时调用该方法,您都会收到一个漂亮的红色警告,表示此调用需要的api版本高于您的min api版本,但这不会阻止您编译和构建apk,它只会在我测试的安卓较低版本上崩溃

@TargetApi

这根本没有帮助,它抑制了在方法中调用新API的警告,但是当您从其他地方调用此方法时,根本没有lint警告,您仍然可以构建和安装apk,但只有在调用该方法时遇到崩溃。

@Penn是否愿意解释为什么这是错误的?我确实发现它比本页上的其他答案更全面、更容易理解。因此+1。这是解释理论+实践的唯一答案,它确实应该被接受。当我使用
@RequiresApi
,在方法调用中加上红色下划线,并且整个类包含错误。@CoolMind你在任何方法中使用了“@RequiresApi”吗?不,我在方法之前添加了它,像
@TargetApi
@CoolMind一样,尝试将“@RequiresApi”用于调用的方法。或者像这样环绕呼叫。如果(Build.VERSION.SDK\u INT>=Build.VERSION\u code.*api\u code*){//your method name}是的,
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
可以工作,但我已经在方法中有了它。谢谢!