Menggunakan compileSdkVersion 23 , namun mencoba mendukung sejauh 9.
getNetworkInfo(int)
dihentikan pada 23. Sarannya adalah untuk menggunakan getAllNetworks()
dan getNetworkInfo(Network)
sebagai gantinya. Namun keduanya membutuhkan minimum API 21.
Apakah ada kelas yang bisa kita gunakan dalam paket dukungan yang dapat membantu dengan ini?
Saya tahu bahwa suatu solusi telah diusulkan sebelumnya , namun tantangan persyaratan API minimum 9 saya menimbulkan masalah.
Jawaban:
Kamu bisa memakai:
Atau dalam switch case
sumber
activeNetwork.getType()
sudah ditinggalkan danConnectivityManager.TYPE_WIFI
ditinggalkancm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
Sedangkan untuk Oktober 2018, jawaban yang diterima sudah usang.
getType()
, dan ketik sendiri, sekarang tidak digunakan lagi di API Level 28. Dari Javadoc:Untuk menggunakan
NetworkCapabilities
, Anda harus memberikanNetwork
turunan kegetNetworkCapabilities()
metode. Untuk mendapatkan contoh itu, Anda perlu menelepongetActiveNetwork()
yang ditambahkan di API Level 23.Jadi saya percaya untuk saat ini cara yang tepat untuk memeriksa dengan aman apakah Anda terhubung ke Wi-Fi atau jaringan seluler adalah:
Anda juga dapat memeriksa jenis lain
TRANSPORT
yang dapat Anda temukan di sini .Catatan penting: jika Anda terhubung ke Wi-Fi dan ke VPN, maka keadaan Anda saat ini bisa jadi
TRANSPORT_VPN
, jadi Anda mungkin ingin juga memeriksanya.Jangan lupa untuk menambahkan izin berikut ke file AndroidManifest Anda:
sumber
NetworkInfo
disusutkan, Anda tidak bisa lagi menggunakanNetWorkInfo
, jadi bagaimana ini memberikan alternatif?Pembaruan Februari 2020:
Jawaban yang diterima sudah tidak digunakan lagi
28 (Android P)
, tetapi metode penggantiannya hanya berfungsi23 (Android M)
. Untuk mendukung perangkat yang lebih lama, saya menulis fungsi pembantu di.Cara Penggunaan:
Ini mengembalikan sebuah
int
, Anda dapat mengubahnya keenum
dalam kode Anda:Anda dapat menyalin Kotler atau versi Java dari fungsi pembantu.
Kotlin:
Jawa:
sumber
No Internet
,Cellular
danWi-Fi
. Jika Anda tidak peduli dengan jenis koneksi, jangan ragu untuk memodifikasi kode agar sesuai dengan aplikasi Anda.Boolean
kelas pembungkus alih-alihboolean
yang primitif. Dalam pernyataan if Anda harus menambahkan ceknull
. Juga bagaimana jika besok mode Transport baru lainnya di NetworkCapabilities diperkenalkan ... jadi menggunakan integer untuk percabangan akan membantu dan Anda juga bisa menggunakan switch case.Jawaban yang diperbarui (19: 07: 2018):
Metode ini akan membantu Anda memeriksa apakah koneksi internet tersedia.
Jawaban lama:
Untuk praktik penggunaan ulang kode terbaik, improvisasi jawaban Roti Keju.
Kode dapat ditempatkan di kelas Util dan dapat digunakan untuk memeriksa apakah ponsel terhubung ke Internet melalui Wifi atau Internet Seluler dari bagian mana pun dari aplikasi Anda.
sumber
activeNetwork.isConnectedOrConnecting()
sekarang tidak digunakan lagiJawaban yang diterima sudah usang dalam versi 28 jadi di sini adalah solusi yang saya gunakan dalam proyek saya.
sumber
Jawab Februari 2019
Untuk memeriksa apakah Anda sedang online:
Untuk mendapatkan jenis konektivitas internet sebelum / sesudah Android M
Semua kasus memerlukan izin untuk mengakses kondisi jaringan
Seperti yang
NetworkInfo
sudah ditinggalkan dan pada API 29 dari sekarang kita harus menggunakanConnectivityManager.NetworkCallback
dengan perubahan jaringan negaraonAvailable()
&onLost()
panggilan balik.Pemakaian:
fitur
LifecycleObserver
untuk menghindari kebocoran memori dengan melakukan beberapaonDestroy()
metode pembersihan .BoradcastReceiver
danNetworkInfo
, dan menggunakanConnectivityManager.NetworkCallback
untuk API 21 ke atas.android.permission.ACCESS_NETWORK_STATE
; tetapi Anda harus memasukkannya jika Anda akan menggunakan kelas utilitas.Kemampuan
sumber
onLost
akan dipanggil.onLost
bukan berarti perangkat kehilangan koneksi internet, tetapi Jaringan kehilangan koneksi.Baik untuk memeriksa apakah jaringan Anda terhubung ke Internet:
sumber
NetworkCapabilities.NET_CAPABILITY_VALIDATED
.Versi Kotlin:
sumber
Seperti yang disarankan Roti Keju , gunakan getActiveNetworkInfo ()
sekarang panggil metode tersebut, untuk penggunaan yang aman coba tangkap
Dan jangan lupa tambahkan:
sumber
getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
Agar berada di sisi yang aman, saya akan menyarankan untuk menggunakan metode juga
Seluruh metode bisa seperti di bawah ini:
sumber
activeNetwork.getType()
sudah ditinggalkan danConnectivityManager.TYPE_WIFI
ditinggalkanInilah cara saya memeriksa apakah jaringan saat ini menggunakan seluler atau tidak pada versi Android terbaru:
sumber
(Hampir) Semua jawaban sudah usang di Android P, jadi inilah
C#
solusinya ( yang mudah diikuti untuk pengembang Java )Kuncinya di sini adalah
Android.Net.TransportType
sumber
Kami mungkin perlu memeriksa konektivitas internet lebih dari sekali. Jadi akan lebih mudah bagi kita jika kita menulis blok kode dalam metode ekstensi
Context
. Di bawah ini adalah ekstensi pembantu saya untukContext
danFragment
.Memeriksa Koneksi Internet
Ekstensi lainnya
sumber
periksa apakah Internet tersedia
sumber
konektivitasManager.getActiveNetwork () tidak ditemukan di Android M di bawah ini (API 28). networkInfo.getState () sudah usang di atas Android L.
Jadi, jawaban terakhir adalah:
sumber
Banyak jawaban yang masih menggunakan getNetworkType di bawah 23 yang sudah usang; gunakan kode di bawah ini untuk memeriksa apakah perangkat memiliki koneksi internet.
..
Dan, jangan lupa untuk menambahkan baris ini di Manifest
sumber
Karena jawaban yang diposting hanya memungkinkan Anda untuk menanyakan jaringan yang aktif, berikut ini cara mendapatkan
NetworkInfo
untuk jaringan apa pun, tidak hanya yang aktif (misalnya jaringan Wifi) (maaf, kode Kotlin di depan)Ini membutuhkan API 21 atau lebih tinggi dan izinnya
android.permission.ACCESS_NETWORK_STATE
sumber
cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
NetManager yang dapat Anda gunakan untuk memeriksa koneksi internet di Android dengan Kotlin
Jika Anda menggunakan minSdkVersion> = 23
Jika Anda menggunakan minSdkVersion <23
sumber
https://www.agnosticdev.com/content/how-detect-network-connectivity-android
silakan ikuti tutorial ini. Ini akan membantu siapa pun yang mencari jawaban.
perhatikan networkInfo telah ditinggalkan maka ganti isNetworkReacheable () dengan @vidha jawaban di bawah ini lewat getApplicationContext () sebagai parameter
sumber
sumber
Ini bekerja untuk saya di Kotlin. Banyak API tidak digunakan lagi di kelas Network Manager sehingga jawaban di bawah ini mencakup semua dukungan API.
Anda juga akan menambahkan di bawah ini
sumber
Kode di bawah ini berfungsi di semua API. (Kotlin)
Namun, getActiveNetworkInfo () tidak digunakan lagi di API 29 dan berfungsi di semua API, jadi kita bisa menggunakannya di semua Api di bawah 29
sumber
Sesuatu seperti ini:
Dan di badan program utama:
sumber
Ini akan bekerja di Android 10 juga. Ini akan mengembalikan true jika terhubung ke internet lain kembali false.
sumber