Meminta izin untuk mengakses perangkat Wi-Fi di sekitar

Aplikasi yang menargetkan Android 13 (API level 33) atau yang lebih baru dan mengelola koneksi Wi-Fi harus meminta izin runtime NEARBY_WIFI_DEVICES. Izin ini memudahkan untuk menjustifikasi akses aplikasi ke perangkat Wi-Fi di sekitar; pada versi Android sebelumnya, aplikasi ini perlu mendeklarasikan izin ACCESS_FINE_LOCATION.

Izin adalah bagian dari grup perangkat di sekitar

Izin NEARBY_WIFI_DEVICES adalah bagian dari grup izin Perangkat di sekitar. Grup ini, yang ditambahkan di Android 12 (API level 31), juga mencakup izin yang terkait dengan Bluetooth dan Ultra-wideband. Saat Anda meminta kombinasi izin apa pun dari grup izin ini, sistem akan menampilkan satu dialog runtime dan meminta pengguna untuk menyetujui akses aplikasi ke perangkat di sekitar. Di setelan sistem, pengguna harus mengaktifkan dan menonaktifkan izin Perangkat di sekitar sebagai grup; misalnya, pengguna tidak dapat menonaktifkan akses Wi-Fi, tetapi tetap mengaktifkan akses Bluetooth untuk aplikasi tertentu.

Tegaskan dengan jelas bahwa aplikasi Anda tidak memperoleh lokasi fisik

Saat Anda menargetkan Android 13 atau yang lebih tinggi, pertimbangkan apakah aplikasi Anda pernah memperoleh informasi lokasi dari API Wi-Fi; jika tidak, Anda harus dengan tegas menegaskannya. Untuk membuat pernyataan ini, tetapkan atribut usesPermissionFlags ke neverForLocation dalam file manifes aplikasi, seperti yang ditampilkan dalam cuplikan kode berikut. Proses ini serupa dengan yang Anda lakukan saat menegaskan bahwa informasi perangkat Bluetooth tidak pernah digunakan untuk lokasi:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Versi sebelumnya dan beberapa API memerlukan izin akses lokasi

Beberapa API Wi-Fi memerlukan izin ACCESS_FINE_LOCATION, meskipun aplikasi Anda menargetkan Android 13 atau yang lebih tinggi. Contohnya mencakup metode berikut dari class WifiManager:

Selain itu, karena izin NEARBY_WIFI_DEVICES hanya tersedia di Android 13 dan yang lebih tinggi, Anda harus menyimpan deklarasi apa pun untuk ACCESS_FINE_LOCATION guna memberikan kompatibilitas mundur di aplikasi Anda. Namun, selama aplikasi Anda tidak mengandalkan informasi lokasi akurat, Anda dapat menetapkan versi SDK maksimum untuk izin ini ke 32, seperti yang ditunjukkan dalam cuplikan kode berikut:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

Memeriksa API yang memerlukan izin

Jika aplikasi menargetkan Android 13 atau yang lebih tinggi, Anda harus mendeklarasikan izin NEARBY_WIFI_DEVICES untuk memanggil salah satu API Wi-Fi berikut:

Alur kerja akses Wi-Fi

Gambar 1 menunjukkan alur kerja akses Wi-Fi pada perangkat yang menjalankan Android 13 atau yang lebih tinggi, untuk aplikasi yang menargetkan Android 13 atau yang lebih tinggi. Perlu diperhatikan bahwa selama Anda menegaskan bahwa aplikasi Anda tidak mendapatkan lokasi fisik dari informasi perangkat Wi-Fi, Anda tidak perlu mendeklarasikan izin ACCESS_FINE_LOCATION lagi:

Gambar 1. Diagram alur untuk menentukan apakah aplikasi yang menargetkan Android 13 (API level 33) atau versi lebih tinggi dapat mengakses informasi Wi-Fi.

Gambar 2 menunjukkan alur kerja akses Wi-Fi pada perangkat yang menjalankan 12L atau lebih rendah. Perhatikan pengandalan pada izin ACCESS_FINE_LOCATION.

Gambar 2. Diagram alur untuk menentukan apakah aplikasi yang menargetkan 12L (API level 32) atau lebih rendah dapat mengakses informasi Wi-Fi.