在代码中抑制 API 级警告

Suppress API level warning in code

我正在尝试创建一个意图,以创建一个兼容 API 级别高于 KitKat 的短信。 代码有效,但我收到警告,要求 API 级别 19。 我试图用 @TargetApi(Build.VERSION_CODES.KITKAT) 解决它,但收到警告“此处不允许使用 Annotations”。

是否有忽略此警告的简单方法?

private boolean apLowerThanKitKat = (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT);

Intent smsIntent = new Intent(android.content.Intent.ACTION_SEND);
if (apLowerThanKitKat)
{
    smsIntent.setPackage("vnd.android-dir/mms-sms");
}
else
{
    //@TargetApi(Build.VERSION_CODES.KITKAT)
    smsIntent.setPackage(Telephony.Sms.getDefaultSmsPackage(getActivity()));
}

提前致谢!

注释需要在方法上

private boolean apLowerThanKitKat = (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT);

Intent smsIntent = new Intent(android.content.Intent.ACTION_SEND);
if (apLowerThanKitKat)
{
    smsIntent.setPackage("vnd.android-dir/mms-sms");
}
else
{
    kitkatSetPackage():
}

@TargetApi(Build.VERSION_CODES.KITKAT)
private void kitkatSetPackage() {
    smsIntent.setPackage(Telephony.Sms.getDefaultSmsPackage(getActivity()));
}

您可以将此注释移动到其他方法(如果所有此代码都在一个方法中),或者将注释放在 class 它自己上。

不要使用布尔值进行 API 检查。直接放在if语句中:

if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT)
{
    smsIntent.setPackage("vnd.android-dir/mms-sms");
}
else
{
    smsIntent.setPackage(Telephony.Sms.getDefaultSmsPackage(getActivity()));
}

这应该会使警告消失。 TargetApi 注释应该在方法级别完成:

@TargetApi(Build.VERSION_CODES.KITKAT)
public void yourKitkatMethod() {}

**将您的代码放入方法中**

@TargetApi(Build.VERSION_CODES.KITKAT)
public void xyzMethod(){
  your code here 
}

现在可以了

我经常在 AOSP 中从一个版本转移到另一个版本,我不想用特定的 @TargetApi() 版本注释误导下一个阅读我代码的人。所以您可以改为执行以下操作:

@SuppressLint("NewApi")
public void xyzMethod() { <your_code> ... }