117 votes

Requiert Ann vs vsApi vs TargetApi

Quelle est la différence entre RequiresApi et TargetApi ?

Échantillon en kotlin:

 @RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback()
 

REMARQUE: FingerprintManager.AuthenticationCallback requiert api M

NOTE 2: si je n'utilise pas la charpente TargetApi, échouez avec l'erreur class requires api level 23...

101voto

Abhay Gawade Points 791

@RequiresApi - Indique que l'élément annoté ne doit être appelé qu'au niveau de l'API donné ou supérieur.

@TargetApi - Indique que Lint doit traiter ce type comme ciblant un niveau d'API donné, quelle que soit la cible du projet.

70voto

ssynhtn Points 184

Je vais d'abord supposer votre min version de l'api est inférieure à l'api, vous allez d'appeler, parce que ces sortes d'annotations aucun sens

@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}

Lorsqu'une méthode est annoté avec cela, quand vous appelez la méthode, de recevoir un joli rouge d'avertissement que cet appel nécessite la version de l'api qui est plus élevé que votre min version de l'api, mais il ne doit pas vous arrêter à partir de la compilation et de la construction de votre apk, il suffit de planter sur les versions antérieures d'android que j'ai testé.

@TargetApi

Ce n'aide pas du tout, il supprimer les avertissements d'appel de la nouvelle api dans votre méthode, mais lorsque vous appelez cette méthode à partir de quelque part d'autre, il n'y a pas de peluches avertissement à tous, et vous pouvez toujours construire et d'installer votre apk seulement pour répondre à un crash lorsque cette méthode est appelée.

38voto

Jorge Aguilar Points 1517

Similaire à ce que Mike a dit, comme vous pouvez le voir dans la documentation:

Indique que l'élément ne doit être appelée sur les API ou d'un niveau supérieur.

C'est dans le but semblables aux anciennes @TargetApi annotation, mais exprime plus nettement que c'est une exigence de l'appelant, plutôt que d'être utilisé pour "supprimer" mises en garde à l'intérieur de la méthode qui dépassent la minSdkVersion.

Comme vous pouvez le voir ici, c'est en fait l'application de l'appelant afin de vérifier l'API qui a été utilisée lors de l'appel de cette méthode, au lieu de simplement la suppression de l'avertissement à partir de votre IDE/PELUCHES.

Vous pouvez comparer cela à la @Non null @Null annotations, ils imposent que l'appelant peut/ne peut pas envoyer de valeurs null dans la fonction.

21voto

Mike Laren Points 5408

À partir de la documentation Javadoc dans https://developer.android.com/reference/android/support/annotation/RequiresApi.html:

[@RequiresApi] C'est dans le but semblables aux anciennes @TargetApi annotation, mais exprime plus nettement que c'est une exigence de l'appelant, plutôt que d'être utilisé pour "supprimer" mises en garde à l'intérieur de la méthode qui dépassent la minSdkVersion.

Je suppose qu'ils sont fonctionnellement équivalents, mais @RequiresApi semble être nouveau et a plus de chances d'être étendue pour inclure plus de fonctionnalités.

6voto

jeevan venugopal Points 158

Deux d'entre eux sont pour la fonctionnalité de gestion ajouté à la nouvelle API android niveaux sans affecter les autres API niveaux.

RequiresApi

@RequiresApi(api = Build.VERSION_CODES.*api_code*)

Ici il est dit que l'élément ne doit être appelée sur les API ou d'un niveau supérieur. L'élément ci-dessous le niveau API ne vais pas l'appeler.

TargetApi

@TargetApi(Build.VERSION_CODES.*api_code*)

Indique que la Charpie doit traiter ce type de ciblage d'une API de niveau, peu importe ce que le projet cible. Uniquement destinées à des fins spécifiques de l'API. Ne sera pas appelé à d'autres API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X