Izin runtime baru untuk perangkat Wi-Fi di sekitar

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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:

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 1. Diagram alir untuk menentukan apakah aplikasi yang menargetkan 12L atau lebih rendah dapat mengakses informasi Wi-Fi.

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:

Gambar 2. Diagram alir untuk menentukan apakah aplikasi yang menargetkan Android 13 atau lebih tinggi dapat mengakses informasi Wi-Fi.