Android 13 (API level 33) memperkenalkan
izin runtime NEARBY_WIFI_DEVICES
,
bagian dari
grup izin NEARBY_DEVICES
untuk aplikasi yang mengelola koneksi perangkat
ke titik akses terdekat melalui Wi-Fi. Izin ini memudahkan Anda untuk membenarkan
akses aplikasi ke perangkat Wi-Fi di sekitar; di versi Android sebelumnya, aplikasi
ini perlu mendeklarasikan izin
ACCESS_FINE_LOCATION
sebagai gantinya.
Jika aplikasi Anda menargetkan Android 13 dan memanggil beberapa API Wi-Fi yang berbeda, aplikasi harus mendapatkan izin baru ini dari pengguna.
Kasus penggunaan yang terpengaruh
Izin baru ini memengaruhi beberapa kasus penggunaan Wi-Fi yang berbeda, termasuk hal berikut:
- Menemukan atau menghubungkan ke perangkat di sekitar, seperti printer atau perangkat transmisi media.
Alur kerja ini memungkinkan aplikasi Anda menyelesaikan tugas semacam ini:
- Menerima informasi AP di luar band, seperti melalui BLE.
- Menemukan dan menghubungkan ke perangkat melalui Wi-Fi Aware dan Connect menggunakan hotspot khusus lokal.
- Menemukan dan menghubungkan ke perangkat melalui Wi-Fi Langsung.
- Memulai koneksi ke SSID yang dikenal, seperti mobil atau perangkat smart home.
- Memulai hotspot khusus lokal.
- Mendekatkan ke perangkat Wi-Fi Aware di sekitar.
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. Jika aplikasi Anda meminta
beberapa izin dalam grup izin ini, pengguna akan melihat satu dialog
runtime, yang akan 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
mengaktifkan akses Bluetooth untuk aplikasi tertentu.
Tegaskan dengan jelas bahwa aplikasi Anda tidak memperoleh lokasi fisik
Saat menargetkan Android 13, pertimbangkan apakah aplikasi Anda
akan mendapatkan informasi lokasi dari API Wi-Fi; jika tidak, Anda harus benar-benar menegaskan
hal tersebut. 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>
Mempertahankan kompatibilitas mundur
Karena izin NEARBY_WIFI_DEVICES
hanya tersedia di
Android 13 atau yang lebih tinggi, Anda harus menyimpan deklarasi untuk
ACCESS_FINE_LOCATION
guna memberikan kompatibilitas mundur di aplikasi Anda. Namun, selama Anda
menyatakan dengan jelas bahwa aplikasi Anda tidak menggunakan API Wi-Fi untuk mendapatkan lokasi fisik, Anda
dapat menyetel versi SDK maksimum izin ini ke 32
, seperti yang ditampilkan di
cuplikan kode berikut:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Perlu diketahui bahwa beberapa API masih memerlukan izin akses lokasi
Beberapa API Wi-Fi terus meminta izin ACCESS_FINE_LOCATION
untuk
mengakses, seperti pada 12L dan yang lebih rendah. Contohnya
menyertakan metode berikut dari class WifiManager
:
Memeriksa ketersediaan API yang memerlukan izin baru
Jika aplikasi menargetkan Android 13 atau yang lebih tinggi, Anda harus mendeklarasikan
izin NEARBY_WIFI_DEVICES
untuk memanggil salah satu API Wi-Fi berikut:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Alur kerja akses Wi-Fi
Gambar 1 menunjukkan alur kerja akses Wi-Fi pada perangkat yang menjalankan
12L atau lebih rendah. Perhatikan pengandalan pada izin ACCESS_FINE_LOCATION
.
Gambar 2 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: