Saya perlu mendeteksi ketika saya memiliki konektivitas jaringan melalui WIFI. Siaran apa yang dikirim untuk memastikan bahwa koneksi jaringan yang valid telah dibuat. Saya perlu memvalidasi bahwa ada koneksi jaringan yang valid untuk HTTP. Apa yang harus saya dengarkan dan tes tambahan apa yang perlu saya lakukan untuk mengetahui bahwa ada koneksi yang valid.
android
android-wifi
Androider
sumber
sumber
Jawaban:
Anda dapat mendaftarkan
BroadcastReceiver
untuk diberi tahu ketika koneksi WiFi dibuat (atau jika koneksi berubah).Daftarkan
BroadcastReceiver
:Dan kemudian dalam
BroadcastReceiver
melakukan sesuatu seperti ini:Untuk info lebih lanjut, lihat dokumentasi untuk
BroadcastReceiver
danWifiManager
Tentu saja Anda harus memeriksa apakah perangkat sudah terhubung ke WiFi sebelum ini.
EDIT: Berkat larangan geoengineering, berikut adalah metode untuk memeriksa apakah perangkat sudah terhubung:
sumber
private boolean isConnectedViaWifi() { ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); }
Yang terbaik yang berhasil untuk saya:
AndroidManifest
Kelas BroadcastReceiver
Izin
sumber
Bagi saya hanya
WifiManager.NETWORK_STATE_CHANGED_ACTION
berfungsi.Daftarkan penerima siaran:
dan terima:
sumber
Jawaban yang diberikan oleh pengguna @JPM dan @usman benar-benar sangat berguna. Ini berfungsi dengan baik tetapi dalam kasus saya itu datang dalam
onReceive
beberapa waktu dalam kasus saya 4 kali sehingga kode saya menjalankan banyak waktu.Saya melakukan beberapa modifikasi dan membuat sesuai kebutuhan saya dan sekarang hanya 1 kali
Ini adalah kelas java untuk Siaran.
Di AndroidManifest
sumber
Kamu bisa memulai koneksi wifi jika Anda memberi pengguna pilihan untuk mengesampingkan perilaku bertanya yang normal setiap kali.
Saya memilih untuk menggunakan tiga metode ...
Ini adalah pemeriksaan cepat jika ada koneksi internet Wifi atau CellData. Dari sini Anda dapat memilih tindakan apa yang ingin Anda ambil. Apakah dalam mode Airplane perlu diperiksa juga.
Di utas terpisah. Saya mengatur variabel IpAddress ke = "" Dan polling sampai saya memiliki alamat ip yang valid.
Cuplikan kode lain ... Jika tidak diaktifkan, aktifkan (dengan izin sebelumnya dari pengguna)
sumber
Untuk mendeteksi keadaan koneksi WIFI, saya telah menggunakan CONNECTIVITY_ACTION dari kelas ConnectivityManager jadi:
dan dari BroadCastReceiver Anda:
ps: berfungsi baik untuk saya :)
sumber
Kode ini tidak memerlukan izin sama sekali. Ini dibatasi hanya untuk perubahan status konektivitas jaringan Wi-Fi (jaringan lain tidak diperhitungkan). Penerima adalah statis diterbitkan dalam file AndroidManifest.xml dan tidak perlu diekspor karena akan dipanggil oleh sistem
protected broadcast
,NETWORK_STATE_CHANGED_ACTION
, di setiap jaringan perubahan negara konektivitas.AndroidManifest:
Kelas BroadcastReceiver:
Izin:
sumber
Berikut adalah contoh kode saya, yang memperhitungkan preferensi pengguna yang hanya mengizinkan komunikasi ketika terhubung ke Wifi.
Saya memanggil kode ini dari dalam
IntentService
sebelum saya mencoba mengunduh barang.Perhatikan bahwa
NetworkInfo
akan terjadinull
jika tidak ada koneksi jaringan apa pun.sumber
Android O menghapus kemungkinan untuk menerima siaran implisit untuk perubahan kondisi wifi. Jadi jika aplikasi Anda ditutup, Anda tidak akan dapat menerimanya. Yang baru
WorkManager
memiliki kemampuan untuk berjalan ketika aplikasi Anda ditutup, jadi saya telah sedikit bereksperimen dengannya dan tampaknya berfungsi dengan cukup baik:Tambahkan ini ke dependensi Anda:
WifiConnectWorker.kt
MainActivity.kt
Perlu diingat bahwa ini hanya tes cepat untuk pemberitahuan satu kali. Masih banyak pekerjaan yang harus dilakukan untuk selalu diberi tahu ketika WiFi dihidupkan dan dimatikan.
PS: Ketika aplikasi berhenti secara paksa , pekerja tidak dimulai, sepertinya
WorkManager
membatalkan permintaan itu.sumber
Saya menggunakan kode ini:
sumber
Saya punya dua metode untuk mendeteksi koneksi WIFI yang menerima konteks aplikasi:
1) metode lama saya
2) Metode baru saya (Saya sedang menggunakan metode ini):
sumber
Untuk semua orang yang menikmati siaran CONNECTIVITY_CHANGE , harap perhatikan ini tidak lagi dipecat ketika aplikasi berada di latar belakang di Android O.
https://developer.android.com/about/versions/o/background.html
sumber
1) Saya juga mencoba pendekatan Penerima Siaran meskipun saya tahu CONNECTIVITY_ACTION / CONNECTIVITY_CHANGE tidak digunakan lagi dalam API 28 dan tidak direkomendasikan. Juga terikat untuk menggunakan register eksplisit, itu mendengarkan selama aplikasi sedang berjalan.
2) Saya juga mencoba Firebase Dispatcher yang berfungsi tetapi tidak di luar aplikasi yang terbunuh.
3) Cara yang disarankan ditemukan adalah WorkManager untuk menjamin eksekusi di luar proses terbunuh dan secara internal menggunakan registerNetworkRequest ()
Bukti terbesar yang mendukung pendekatan # 3 disebut oleh Android doc itu sendiri. Khusus untuk aplikasi di latar belakang.
Juga disini
Sejauh ini berfungsi dengan baik untuk kami menggunakan permintaan WorkManager Berkala.
Pembaruan: Saya akhirnya menulis posting media 2 seri tentang hal itu.
sumber