Bagaimana cara membuat dan membaca secara terprogram WEP/EAP WiFi configurations
di Android?
Saya telah melihat sejumlah orang bergumul dengan pertanyaan ini di berbagai forum dan di seluruh komunitas. Saya tahu ini tidak semudah itu (terutama EAP) untuk mencari tahu karena Ketika saya ingin mencapai hal yang sama saya juga berjuang cukup banyak. Nah, semua kerja keras analisis kode dan mencari berbagai implementasi di internet dilakukan dengan saya akhirnya bisa mencapai tujuan. Semua kredit diberikan ke sejumlah proyek open source dan pengembangnya.
Saya ingin berbagi pengetahuan ini dengan semua, Karena SO mendorong hal ini: "Tidak apa-apa juga untuk bertanya dan menjawab pertanyaan Anda sendiri, selama Anda berpura-pura berada dalam Jeopardy: ungkapkan dalam bentuk pertanyaan."
Bagian 1: Membuat konfigurasi WiFi WEP secara terprogram.
Bagian 2: Baca konfigurasi WiFi WEP secara terprogram.
sumber
Jawaban:
Bagian 1: Membuat konfigurasi WiFi WEP secara terprogram
Ini sangat mudah, WifiConfiguration mengekspos antarmuka untuk membuat yang sama. Berikut ini contoh kode:
Mengikuti izin yang diperlukan di AndroidManifest.xml
Bagian 2: Baca
lagi konfigurasi WiFi WEP secara terprogram . Berikut ini contoh kode:
Bagian 3: Membaca Konfigurasi WiFi EAP secara terprogram
Sekarang ini rumit. Anda dapat menemukan kode yang menyimpan konfigurasi WiFi EAP melalui UI Android vanilla di WifiDialog.java . Cukup mudah Kita bisa menggunakan kode yang sama di Aplikasi kita, Nah TIDAK! Jika Anda kebetulan untuk mencoba ini Anda akan mendapatkan error mengatakan tidak dapat menemukan simbol-simbol
eap
,phase
,client_cert
dan sebagainya. Penyelidikan sedikit mendetail memberi tahu kami EnterpriseFieldis private
di dalamWiFiConfiguration
kelas dan semua simbol yang tidak dapat kami temukan adalah tipenyaEnterpriseField
. Kami telah menemui hambatan, Kami membutuhkan bidang ini untuk membaca / menyimpan konfigurasi EAP tetapi kami tidak memiliki akses terprogram ke sana!Java Reflection API
untuk menyelamatkan Yah saya bukan ahli Java jadi saya tidak akan membahas detail API Refleksi seperti itu dan Anda dapat mencari tutorial di Google atau mendapatkan informasi lebih lanjut di sini . Untuk membuatnya tetap Singkat dan Manis, API Refleksi memungkinkan Anda untuk memeriksa kelas, antarmuka, bidang, dan metode pada waktu proses, tanpa mengetahui nama kelas, metode, dll. Pada waktu kompilasi. Dimungkinkan juga untuk membuat instance objek baru, memanggil metode dan mendapatkan / menetapkan nilai bidang menggunakan refleksi. Dan, Refleksi yang Penting dapat membantu Anda mengakses anggota data pribadi di dalam kelas Nah inilah yang kita butuhkan bukan? :)Mari kita periksa contoh kode sekarang yang menunjukkan bagaimana membaca konfigurasi WiFi EAP menggunakan Reflection Api. Sebagai bonus, potongan tersebut akan mencatat konfigurasi ke file dan menyimpannya di SD Card .... cukup apik ..eh;) Sedikit gambaran umum tentang Refleksi Api dan saya yakin memahami kode di bawah ini mudah.
Ini adalah kode untuk membuat logfile ke kartu SD sebelum memanggil
readEapConfig()
fungsi tersebut.Sekarang
readEapConfig()
fungsinya sendiri:sumber
Ahh saya kehabisan ruang edit, Menambah bagian yang tersisa di sini.
Bagian 4: Simpan konfigurasi WiFi EAP secara terprogram
Jika Anda sudah membaca bagian 3, Anda sudah memahami keajaiban Refleksi yang bekerja di sini, Jika Anda langsung melompat ke bagian ini, harap baca pendahuluan sebelum potongan kode di bagian 3 dan Anda akan dengan cepat memahami kode di sini !
Nah itu dia! Dan saya harap ini membantu beberapa pengembang yang hilang, di suatu tempat, kapan-kapan :)
sumber
Field wcAdhoc = WifiConfiguration.class.getField("adhocSSID"); Field wcAdhocFreq = WifiConfiguration.class.getField("frequency");
. Anggota ini tidak ada di WifiConfiguration.java. Kode memberi saya pengecualianjava.lang.NoSuchFieldException: adhocSSID
. Tolong bantu.wcefPrivateKey.get(selectedConfig)
melempar aNullPointerException
. Ada keberuntungan dari orang lain?Android telah menambahkan API ke JellyBean 4.3. Anda harus menggunakan opsi ini jika Anda ingin mengkonfigurasi WIFI di API 18:
http://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig.html
sumber
Bagian 4 memulai saya di jalan yang benar! Namun saya ingin membuat konfigurasi TTLS daripada TLS di sini adalah bagaimana saya melakukannya!
Semoga ini bisa membantu seseorang. @Android pelajar Saya menghapus sedikit tentang adHocFrequency dan SSID karena mereka menyebabkan crash tetapi hasil saya masih bagus tanpa mereka.
sumber
Kunci WEP ditutup, jadi tidak mungkin untuk membacanya dengan kode yang disebutkan
Apakah ada cara untuk mengatasinya dengan cara yang sama seperti solusi EAP? Dengan refleksi?
sumber