Ich gehe zunächst davon aus, dass Ihre Min-API-Version niedriger ist als die API, die Sie aufrufen werden, da diese Art von Anmerkungen hier Sinn macht
@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
Wenn eine Methode damit kommentiert wird, erhalten Sie jedes Mal, wenn Sie diese Methode aufrufen, eine nette rote Warnung, dass für diesen Aufruf eine API-Version erforderlich ist, die höher als Ihre Min-API-Version ist, aber Sie nicht daran hindert, Ihre API zu kompilieren und zu erstellen wird nur auf niedrigeren Versionen von Android abstürzen, wie ich es getestet habe.
@TargetApi
Dies hilft überhaupt nicht, es unterdrückt Warnungen vor dem Aufruf neuer APIs in Ihrer Methode, aber wenn Sie diese Methode von einem anderen Ort aus aufrufen, gibt es überhaupt keine Flusenwarnung, und Sie können Ihre Apk trotzdem nur erstellen und installieren, um eine zu erfüllen Absturz, wenn diese Methode aufgerufen wird.
Ähnlich wie Mike sagte, wie Sie in der Dokumentation sehen können:
Wie Sie hier sehen können, wird der Aufrufer dadurch gezwungen, die API zu überprüfen, die beim Aufrufen dieser Methode verwendet wurde, anstatt nur die Warnung aus Ihrer IDE / LINT zu entfernen.
Sie können dies mit den Annotationen @NonNull oder @Null vergleichen. Sie erzwingen, dass der Aufrufer Nullwerte an die Funktion senden kann / kann.
quelle
Aus den JavaDocs in https://developer.android.com/reference/android/support/annotation/RequiresApi.html :
Ich nehme an, sie sind funktional gleichwertig,
@RequiresApi
scheinen aber neuer zu sein und haben eine höhere Chance, um mehr Funktionen erweitert zu werden.quelle
Beide dienen zur Behandlung von Funktionen, die neuen Android-API-Ebenen hinzugefügt wurden, ohne die anderen API-Ebenen zu beeinflussen.
RequiresApi
Hier heißt es, dass das mit Anmerkungen versehene Element nur auf der angegebenen API-Ebene oder höher aufgerufen werden sollte. Das mit Anmerkungen versehene Element unterhalb der angegebenen API-Ebene wird nicht aufgerufen.
TargetApi
Gibt an, dass Lint diesen Typ als Ziel für eine bestimmte API-Ebene behandeln soll, unabhängig davon, um welches Projektziel es sich handelt. Nur für die angegebene API-Ebene gedacht. Wird auf einer anderen API-Ebene nicht aufgerufen.
quelle
@RequiresApi
unterstrich AS einen Methodenaufruf mit Rot und einer ganzen Klasse als fehlerhaft.@TargetApi
.if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
funktioniert, aber ich habe es bereits in der Methode. Vielen Dank!