Meminta izin untuk mengakses perangkat Wi-Fi di sekitar

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

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 dari grup izin akses ini, sistem akan menampilkan satu dan meminta pengguna untuk menyetujui akses aplikasi Anda ke perangkat di sekitar. Di setelan sistem, pengguna harus mengaktifkan dan menonaktifkan Perangkat di sekitar izin akses sebagai grup; misalnya, pengguna tidak dapat menonaktifkan akses Wi-Fi tetapi tetap Akses Bluetooth diaktifkan untuk aplikasi tertentu.

Tegaskan dengan jelas bahwa aplikasi Anda tidak memperoleh lokasi fisik

Saat menargetkan Android 13 atau yang lebih tinggi, pertimbangkan apakah aplikasi Anda memperoleh informasi lokasi dari API Wi-Fi; jika tidak, Anda harus menegaskan hal itu. 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 menargetkan Android 13 atau yang lebih baru. Contohnya mencakup: metode dari class WifiManager:

Selain itu, karena izin NEARBY_WIFI_DEVICES hanya tersedia di Android 13 dan yang lebih baru, Anda harus menyimpan deklarasi untuk ACCESS_FINE_LOCATION untuk memberikan kompatibilitas mundur di aplikasi Anda. Namun, selama aplikasi Anda tidak mengandalkan informasi lokasi akurat, Anda dapat setel 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 baru. 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 alir untuk menentukan apakah aplikasi yang menargetkan Android 13 (API level 33) atau versi yang lebih baru 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 alir untuk menentukan apakah aplikasi yang menargetkan 12L (API level 32) atau yang lebih rendah dapat mengakses informasi Wi-Fi.