Em primeiro lugar, assumirei que sua versão da min api é menor do que a api que você vai chamar, porque é aí que esse tipo de anotação faz sentido
@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
Quando um método é anotado com isso, sempre que você chama esse método, você recebe um bom aviso vermelho de que esta chamada requer uma versão da API superior à sua versão da API mínima, mas isso não o impede de compilar e construir seu apk. irá apenas travar em versões anteriores do Android enquanto o testei.
@TargetApi
Isso não ajuda em nada, ele suprime avisos de chamada de novos apis em seu método, mas quando você chama esse método de outro lugar, não há nenhum aviso de lint e você ainda pode construir e instalar seu apk apenas para atender a um travar quando esse método for chamado.
Semelhante ao que Mike disse, como você pode ver na documentação:
Como você pode ver aqui, isso está na verdade obrigando o chamador a verificar a API que foi usada ao chamar este método, em vez de apenas remover o aviso de seu IDE / LINT.
Você pode comparar isso com as anotações @NonNull ou @Null, elas impõem que o chamador pode / não pode enviar valores nulos para a função.
fonte
Dos JavaDocs em https://developer.android.com/reference/android/support/annotation/RequiresApi.html :
Suponho que sejam funcionalmente equivalentes, mas
@RequiresApi
parecem ser mais recentes e têm uma chance maior de serem estendidos para incluir mais funcionalidades.fonte
Ambos são para lidar com o recurso adicionado a novos níveis de API do Android sem afetar os outros níveis de API.
RequerApi
Aqui, ele diz que o elemento anotado só deve ser chamado no nível de API fornecido ou superior. O elemento anotado abaixo do nível de API fornecido não chamará.
TargetApi
Indica que o Lint deve tratar esse tipo como direcionado a um determinado nível de API, independentemente do destino do projeto. Significa apenas para o nível de API especificado. Não será chamado em outro nível de API.
fonte
@RequiresApi
, AS sublinhou uma chamada de método com vermelho e também uma classe inteira como contendo um erro.@TargetApi
.if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
funciona, mas já tenho no método. Obrigado!