Pertama-tama saya akan menganggap versi min api Anda lebih rendah dari api yang akan Anda panggil, karena di sanalah jenis anotasi ini masuk akal
@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}
Ketika sebuah metode dianotasi dengan ini, kapan pun Anda memanggil metode itu, Anda menerima peringatan merah yang bagus bahwa panggilan ini membutuhkan versi api yang lebih tinggi dari versi api min Anda, tetapi itu tidak menghentikan Anda dari mengompilasi dan membangun apk Anda, itu hanya akan mogok di versi android yang lebih rendah saat saya mengujinya.
@TargetApi
Ini tidak membantu sama sekali, ini menekan peringatan untuk memanggil apis baru dalam metode Anda, tetapi ketika Anda memanggil metode ini dari tempat lain, tidak ada peringatan lint sama sekali, dan Anda masih dapat membangun dan menginstal apk Anda hanya untuk memenuhi crash ketika metode itu dipanggil.
Mirip dengan apa yang dikatakan Mike, seperti yang Anda lihat di dokumentasi:
Seperti yang Anda lihat di sini, ini sebenarnya memaksa pemanggil untuk memverifikasi API yang telah digunakan saat memanggil metode ini, alih-alih hanya menghapus peringatan dari IDE / LINT Anda.
Anda dapat membandingkan ini dengan anotasi @NonNull atau @Null, yang menegaskan bahwa pemanggil dapat / tidak dapat mengirim nilai null ke dalam fungsi.
sumber
Dari JavaDocs di https://developer.android.com/reference/android/support/annotation/RequiresApi.html :
Saya kira mereka secara fungsional setara tetapi
@RequiresApi
tampaknya lebih baru dan memiliki peluang lebih tinggi untuk diperluas untuk menyertakan lebih banyak fungsionalitas.sumber
Keduanya untuk menangani fitur yang ditambahkan ke level API Android baru tanpa memengaruhi level API lainnya.
MembutuhkanApi
Di sini dikatakan bahwa elemen beranotasi hanya boleh dipanggil pada level API tertentu atau lebih tinggi. Elemen beranotasi di bawah level API yang diberikan tidak akan dipanggil.
TargetApi
Menunjukkan bahwa Lint harus memperlakukan jenis ini sebagai menargetkan level API tertentu, apa pun target proyeknya. Hanya dimaksudkan untuk level API tertentu. Tidak akan dipanggil di level API lain.
sumber
@RequiresApi
, AS menggarisbawahi pemanggilan metode dengan warna merah dan juga seluruh kelas mengandung kesalahan.@TargetApi
.if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
berhasil, tetapi saya sudah memilikinya dalam metode. Terima kasih!