Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Suppress API level warning in code

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!

like image 395
TheTool Avatar asked Dec 30 '15 12:12

TheTool


3 Answers

Don't use a boolean for the API checking. Put it directly in the if statement:

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

That should make the warning go away. TargetApi annotations should be done at the method level:

@TargetApi(Build.VERSION_CODES.KITKAT)
public void yourKitkatMethod() {}
like image 127
jlhonora Avatar answered Oct 04 '22 14:10

jlhonora


Annotation needs to be on a method

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

You could move this annotation to other methods (if all of this code is in one method), or put the annotation on the class it self.

like image 41
Blundell Avatar answered Oct 04 '22 14:10

Blundell


I'm constantly moving from version to version in the AOSP, and I don't want to mislead the next person reading my code with a specific @TargetApi() version annotation. So you can do the following instead:

@SuppressLint("NewApi")
public void xyzMethod() { <your_code> ... }
like image 24
Chef Pharaoh Avatar answered Oct 04 '22 13:10

Chef Pharaoh