6

I am trying to create an intent to create an sms with compatibility for API levels higher than KitKat. The code works, but I got a warning that the API level 19 is required. I tried to solve it with @TargetApi(Build.VERSION_CODES.KITKAT) but got a warning "Annotations are not allowed here".

Is there an easy way to ignore this warning?

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()));
}

Thanks in advance!

4

4 回答 4

11

不要使用布尔值进行 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() {}
于 2015-12-30T12:59:24.170 回答
4

注释需要在方法上

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()));
}

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

于 2015-12-30T12:59:04.603 回答
2

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

@SuppressLint("NewApi")
public void xyzMethod() { <your_code> ... }
于 2019-01-22T19:49:46.170 回答
0

**把你的代码放在一个方法中**

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

现在可以了

于 2015-12-30T13:03:38.340 回答