2016-05-15 2 views
1

Я следил за this, чтобы проверить доступность интернет-соединения. Проблема, с которой я сталкиваюсь, заключается в том, что даже когда мой рабочий стол (действующий как точка доступа Wi-Fi) не имеет подключения к Интернету, этот код возвращается положительно. Я хочу убедиться, что если сигнал Wi-Fi отсутствует, результат должен быть отрицательным. Можно ли это достичь?Android: проверка на подключение к Интернету

+0

Если у вас на рабочем столе нет соединения, которое действует как ваш маршрутизатор/модем, вы можете проверить, что ваше соединение активно, вызывая ваш веб-сервер или Google.com. –

+1

Вы попробовали мой ответ и сделали это для вас? – Vucko

+0

Привет Vucko ... ваш метод работает отлично. – Mandroid

ответ

0

Итак, у вас есть метод, который говорит вам, доступно ли или нет подключения к Интернету, но вы думаете , что этого недостаточно, поскольку он не описывает качество соединения.

Вы можете попробовать опросить какой-либо веб-сайт, чтобы увидеть, если вы получите ответ и на его основе решите, следует ли выполнять какой-либо сетевой запрос. Но, на мой взгляд, это не стоит.

Вместо этого вы можете просто отправить запрос и обработать возможную сетевую ошибку, потому что это то, что вам нужно делать в любом случае (сервер может быть отключен). Итак, зачем делать дополнительные тесты?

2

Это код, я использую, чтобы проверить, есть ли подключение к Интернету в моем приложении, и он работал на меня:

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return ((activeNetworkInfo != null) && activeNetworkInfo.isConnected()); 
} 
0

Хотя ваше устройство подключено к Wi-Fi, вы можете не получить входные данные. Таким образом, вы можете свистеть Google.com или любой другой сайт и посмотреть, если это отвечает обратно с кодом 200.

public class internetchek extends AsyncTask<Void,Void,Void> { 

public boolean connection; 
Context ctx; 
public internetchek(Context context){ 
    this.ctx = context; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(Void... params) { 

    if(isNetworkAvailable(this.ctx)) 
    { 

    Log.d("NetworkAvailable","TRUE"); 
     if(connectGoogle()) 
     { 

      Log.d("GooglePing","TRUE"); 
      connection=true; 
     } 
     else 
     { 

      Log.d("GooglePing","FALSE"); 
      connection=false; 
     } 
    } 
    else { 

     connection=false; 
    } 


    return null; 
} 

@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
} 

public static boolean isNetworkAvailable(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     return true; 
    } 
    return false; 
} 

public static boolean connectGoogle() { 
    try { 
     HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(10000); 
     urlc.connect(); 
     return (urlc.getResponseCode() == 200); 

    } catch (IOException e) { 

     Log.d("GooglePing","IOEXCEPTION"); 
     e.printStackTrace(); 
     return false; 
    } 
}} 
Смежные вопросы