Birden fazla yol var
İlk olarak, en kısa ama verimsiz yol
Yalnızca Ağ Durumu İzni gerekiyor
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Sonra bu yöntem,
public boolean activeNetwork () {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
return isConnected;
}
Cevaplarda görüldüğü gibi ConnectivityManager
bir çözüm, sadece bir yöntem içinde ekledim, bu basitleştirilmiş bir yöntemdir
ConnectivityManager
, İnternet erişimi değil, bir ağ erişimi varsa tüm kullanım doğru döner, WiFi'nizin bir yönlendiriciye bağlı olduğu, ancak yönlendiricinin internetin olmadığı anlamına gelir. döner, bağlantı kullanılabilirliğini kontrol eder
İkincisi, Verimli bir yol
Ağ Durumu ve İnternet İzinleri gerekli
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Sonra bu sınıf,
public class CheckInternetAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private Context context;
public CheckInternetAsyncTask(Context context) {
this.context = context;
}
@Override
protected Boolean doInBackground(Void... params) {
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
assert cm != null;
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
if (isConnected) {
try {
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
urlc.setRequestProperty("User-Agent", "Android");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
if (urlc.getResponseCode() == 204 &&
urlc.getContentLength() == 0)
return true;
} catch (IOException e) {
Log.e("TAG", "Error checking internet connection", e);
return false;
}
} else {
Log.d("TAG", "No network available!");
return false;
}
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
Log.d("TAG", "result" + result);
if(result){
// do ur code
}
}
}
Aramak CheckInternetAsyncTask
new CheckInternetAsyncTask(getApplicationContext()).execute();
Bazı Açıklamalar: -
interneti kontrol etmelisiniz AsyncTask
, aksi takdirde android.os.NetworkOnMainThreadException
bazı durumlarda
ConnectivityManager
gerçek istek gönderirse ağ erişimini kontrol etmek için kullanılır (Ping)
İsteği göndermek http://clients3.google.com/generate_204
, bu tanınmış URL bilinen bu hızlı ve daha verimli daha bir HTTP durumu 204 ile boş bir sayfa döndürmek için http://www.google.com
, okumak bu . web siteniz varsa, yalnızca uygulama içinde kullanıyorsanız, google yerine web sitesi koymak tercih edilir
Zaman aşımı aralığı değiştirilebilir (20ms -> 2000ms), 1500ms yaygın olarak kullanılır
if(Runtime.getRuntime().exec("/system/bin/ping -c 1 8.8.8.8").waitFor()==0) ...
. Bunun daha iyi uygulanması için cevabımı görün . Btw kabul edilen cevap (ve diğerleri burada) sadece bir ağ bağlantısı kontrol edin , internet değil.