2015-12-30 19 views
5

Próbuję utworzyć intencję utworzenia sms z kompatybilnością dla poziomów interfejsu API wyższych niż KitKat. Kod działa, ale otrzymałem ostrzeżenie, że poziom interfejsu API 19 jest wymagany. Próbowałem rozwiązać to z @TargetApi(Build.VERSION_CODES.KITKAT), ale otrzymałem ostrzeżenie "Annotations nie są tutaj dozwolone".Ukrywanie ostrzeżenia o poziomie interfejsu API w kodzie

Czy można łatwo zignorować to ostrzeżenie?

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

Z góry dziękuję!

Odpowiedz

8

Nie należy używać wartości boolowskiej do sprawdzania interfejsu API. Umieść go bezpośrednio w instrukcji 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())); 
} 

To powinno spowodować, że ostrzeżenie zniknie. adnotacje TargetApi powinno odbywać się na poziomie metody:

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

Próbowałem być sprytny i poprawić czytelność za pomocą boolean: p Ale to działa idealnie, dziękuję! – TheTool

+0

@TheTool był tam :) – jlhonora

+0

TargetApi może być również używany na poziomie klasy – Flo354

3

Adnotacja musi być na metodzie

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

Można przenieść ten adnotacji do innych metod (jeśli cały ten kod jest w jednej metody), lub umieścić adnotację na siebie klasa nim.

+0

odpowiedź ta działa również świetne, ale przyjęte rozwiązanie jest nieco szybsza w realizacji. – TheTool

-1

** Put ur kod w metodzie **

@TargetApi (Build.VERSION_CODES.KITKAT) public void xyzMethod() { kodzie tutaj }

że będzie działać teraz