@TargetApi注释仅针对一个Api级别或更高级别吗?

时间:2016-04-24 16:17:09

标签: android

我在我的应用程序中使用@TargetApi(23)。

@TargetApi(23)
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        onAttachToContext(context);
    }


    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            onAttachToContext(activity);
        }
    }

    protected void onAttachToContext(Context context) {

    }

但我无法理解:@TargetApi(23)注释的意思是“仅适用于Api等级23”或“适用于Api等级23及以上”?例如,如果设备24的Api级别是onAttach(Context context)方法,则调用?

5 个答案:

答案 0 :(得分:20)

TargetApi注释仅用于lint工具,并且在运行时没有结果。如果您在方法中使用23中仅提供的任何API方法并且未声明TargetApi,那么您将收到一些警告,表明您使用的API在最低SDK版本中不可用。您有责任将此方法称为一致性,并了解将从中调用的API级别。

答案 1 :(得分:1)

@TargetApi不会阻止任何代码运行, 它所做的就是消除棉绒错误。

您仍然需要按照以下内容添加内容

if (Build.VERSION.SDK_INT > 7){
    //...
}

答案 2 :(得分:0)

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    //to do something
}else{
    //to do something else
}

我升级了@Yang的答案。

答案 3 :(得分:0)

您也可以使用

@RequiresApi(Build.VERSION_CODES.N)

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

答案 4 :(得分:0)

对于@Fivos 的回答,添加@RequiresApi 还意味着将出现构建/编译错误,表明您正在调用仅存在于高于您指定的最小目标的目标上的方法/功能。

Function using @requiresapi

Compilation error after adding requires