Saya ingin merancang aplikasi yang menampilkan daftar jaringan Wi-Fi yang tersedia dan terhubung ke jaringan mana saja yang dipilih oleh pengguna.
Saya telah mengimplementasikan bagian yang menunjukkan hasil pemindaian. Sekarang saya ingin terhubung ke jaringan tertentu yang dipilih oleh pengguna dari daftar hasil pemindaian.
Bagaimana saya melakukan ini?
android
android-wifi
wifimanager
Vikram Gupta
sumber
sumber
Jawaban:
Anda perlu membuat
WifiConfiguration
contoh seperti ini:Kemudian, untuk jaringan WEP Anda perlu melakukan ini:
Untuk jaringan WPA Anda perlu menambahkan frasa sandi seperti ini:
Untuk jaringan Terbuka Anda perlu melakukan ini:
Kemudian, Anda perlu menambahkannya ke pengaturan Android wifi manager:
Dan akhirnya, Anda mungkin perlu mengaktifkannya, sehingga Android terhubung ke sana:
UPD: Dalam hal WEP, jika kata sandi Anda dalam hex, Anda tidak perlu mengelilinginya dengan tanda kutip.
sumber
The jawaban sebelumnya bekerja , tetapi solusi sebenarnya bisa lebih sederhana. Looping melalui daftar jaringan yang dikonfigurasi tidak diperlukan karena Anda mendapatkan id jaringan ketika Anda menambahkan jaringan melalui WifiManager.
Jadi solusi lengkap dan disederhanakan akan terlihat seperti ini:
sumber
CHANGE_WIFI_STATE
izin diperlukan.Rujuk: https://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities
Ada tiga jenis jaringan WIFI.
Pertama, instantiate objek WifiConfiguration dan isi SSID jaringan (perhatikan bahwa itu harus dilampirkan dalam tanda kutip ganda), atur status awal untuk dinonaktifkan, dan tentukan prioritas jaringan (angka sekitar 40 tampaknya berfungsi dengan baik).
Sekarang untuk bagian yang lebih rumit: kita perlu mengisi beberapa anggota WifiConfiguration untuk menentukan mode keamanan jaringan. Untuk jaringan terbuka.
Untuk jaringan yang menggunakan WEP; perhatikan bahwa kunci WEP juga terlampir dalam tanda kutip ganda.
Untuk jaringan yang menggunakan WPA dan WPA2, kami dapat menetapkan nilai yang sama untuk keduanya.
Akhirnya, kita dapat menambahkan jaringan ke daftar WifiManager yang dikenal
sumber
Kredit ke @ raji-ramamoorthi & @kenota
Solusi yang bekerja untuk saya adalah kombinasi dari kontributor di atas di utas ini.
Untuk sampai di
ScanResult
sini adalah prosesnya.Pemberitahuan kepada
unregister
padaonPause
&onStop
hidup iniunregisterReceiver(broadcastReceiver);
sumber
Jika perangkat Anda mengetahui konfigurasi Wifi (sudah tersimpan), kami dapat memintas ilmu roket. Hanya loop melalui konfigurasi cek jika SSID cocok. Jika demikian, hubungkan dan kembali .
Tetapkan izin:
Menghubung:
sumber
Saya mematahkan kepala untuk memahami mengapa jawaban Anda untuk WPA / WPA2 tidak berfungsi ... setelah beberapa jam mencoba, saya menemukan apa yang Anda lewatkan:
DIBUTUHKAN untuk jaringan WPA !!!!
Sekarang berhasil :)
sumber
Ini adalah kegiatan yang dapat Anda subclass untuk memaksa koneksi ke wifi tertentu: https://github.com/zoltanersek/android-wifi-activity/blob/master/app/src/main/java/com/zoltanersek/androidwifiactivity/ WifiActivity.java
Anda perlu mensubklasifikasikan kegiatan ini dan menerapkan metode-metodenya:
sumber
Di API level 29,
WifiManager.enableNetwork()
metode tidak digunakan lagi . Sesuai dokumentasi Android API (periksa di sini ):Dari API level 29, untuk terhubung ke jaringan WiFi, Anda harus menggunakannya
WifiNetworkSpecifier
. Anda dapat menemukan kode contoh di https://developer.android.com/reference/android/net/wifi/WifiNetworkSpecifier.Builder.html#build ()sumber
Saya juga mencoba terhubung ke jaringan. Tidak ada solusi yang diusulkan di atas yang berfungsi untuk hugerock T70. Fungsi wifiManager.disconnect (); tidak terputus dari jaringan saat ini. Oleh karena itu tidak dapat menyambung kembali ke jaringan yang ditentukan. Saya telah memodifikasi kode di atas. Bagi saya bolow kode berfungsi dengan baik:
sumber
UID nnnnn does not have permission to update configuration xxxx. MD_START_CONNECT but no requests and connected, but app does not have sufficient permissions, bailing.
Coba metode ini. Sangat mudah:
sumber