Kamu benar. Kode yang Anda berikan hanya memeriksa apakah ada koneksi jaringan. Cara terbaik untuk memeriksa apakah ada koneksi Internet yang aktif adalah dengan mencoba dan menyambung ke server yang dikenal melalui http.
public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
}
} else {
Log.d(LOG_TAG, "No network available!");
}
return false;
}
Tentu saja Anda dapat mengganti http://www.google.com
URL untuk server lain yang ingin Anda sambungkan, atau server yang Anda tahu memiliki waktu aktif yang baik.
Seperti yang ditunjukkan Tony Cho dalam komentar di bawah ini , pastikan Anda tidak menjalankan kode ini di utas utama, jika tidak, Anda akan mendapatkan pengecualian NetworkOnMainThread (di Android 3.0 atau lebih baru). Gunakan AsyncTask atau Runnable sebagai gantinya.
Jika Anda ingin menggunakan google.com, Anda harus melihat modifikasi Jeshurun. Dalam jawabannya dia mengubah kode saya dan membuatnya sedikit lebih efisien. Jika Anda terhubung ke
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection())
dan kemudian periksa kode respons untuk 204
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0)
maka Anda tidak perlu mengambil seluruh beranda google terlebih dahulu.