我在我的应用程序中使用@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)方法,则调用?
答案 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 还意味着将出现构建/编译错误,表明您正在调用仅存在于高于您指定的最小目标的目标上的方法/功能。