2015-11-26 2 views
3

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

import android.app.Activity; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class ConnectionDetector { 
    private Context _context; 

    public ConnectionDetector(Context context) { 
     this._context = context; 
    } 

    public boolean isConnectingToInternet() { 
     if (networkConnectivity()) { 
      try { 
       HttpURLConnection urlc = (HttpURLConnection) (new URL(
         "http://www.google.com").openConnection()); 
       urlc.setRequestProperty("User-Agent", "Test"); 
       urlc.setRequestProperty("Connection", "close"); 
       urlc.setConnectTimeout(3000); 
       urlc.setReadTimeout(4000); 
       urlc.connect(); 
       // networkcode2 = urlc.getResponseCode(); 
       return (urlc.getResponseCode() == 200); 
      } catch (IOException e) { 
       return (false); 
      } 
     } else 
      return false; 

    } 

    private boolean networkConnectivity() { 
    ConnectivityManager cm = (ConnectivityManager) _context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     return true; 
    } 
    return false; 
} 

} 

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

public void CheckInternet(){ 

    // Boolean isInternetPresent; 

    ConnectionDetector cd = new ConnectionDetector(getApplicationContext()); 

// isInternetPresent = cd.isConnectingToInternet(); 

    if (cd.isConnectingToInternet()) { 
     // Internet Connection is Present 

     Log.i(TAG, "INTERNET IS GUUD"); 

    } else { 
     // Internet connection is not present 
     // Ask user to connect to Internet 
     Log.i(TAG, "INTERNET IS NOOOO GUUD"); 

    } 
} 
+0

Возможный дубликат [Обнаружение ли есть подключение к сети Интернет доступна на Android] (http://stackoverflow.com/questions/4238921/detect-whether-there -is-a-internet-connection-available-on-android) –

ответ

7

Создать класс:

public class Utility { 
    public static boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 
} 

Тогда вы называете Methode от деятельности, он будет возвращать истинным или ложным:

Utility.isNetworkAvailable(AnyActivity.this); 

И не забудьте добавить разрешения на Android манифеста

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
+0

, это все равно вернет true, даже если я не подключен к Интернету –

2

Неправильный подход к проверке подключения к Интернету. Для этого вы должны использовать Android, встроенный в класс ConnectivityManager.

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

ConnectivityManager cm = 
     (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isConnected = activeNetwork != null && 
         activeNetwork.isConnectedOrConnecting(); 

Это также позволит вам определить такие вещи, как тип соединения, если это наблюдение, и т.д., так что вы можете принимать обоснованные решения о выполняемых сетевых задачах.

У вас есть дополнительная информация о this lesson на Android разработчиках сайта.

+0

Я использую этот класс под «ConnectionDectector». я хочу проверить Интернет в разное время, поэтому я создал класс «ConnectionDectector», и я пытаюсь назвать его из других классов –

0

Вы должны сделать это в асинтете. Я использую http://clients3.google.com/generate_204 для обнаружения соединения.

import java.net.HttpURLConnection; 
    import java.net.URL; 


    ... 

    private int inter = 0; 


    ... 


    new checkconne().execute(); 

    ... 



    class checkconne extends AsyncTask<String, String, String> { 

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



          } 
          @Override 
          protected String doInBackground(String... args) { 

           int kk=0; 
           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(); 
            kk= urlc.getResponseCode(); 
           } catch (IOException e) { 


     Log.e("qweqwe", "Error checking internet connection", e); 
          } 

          inter=kk; 



          return null; 
         } 
         @Override 
         protected void onPostExecute(String file_url) { 


          if (inter == 204){  
      Toast.makeText(MainActivity3.this, "is connected", Toast.LENGTH_LONG).show();    

          }else{  


           Toast.makeText(MainActivity3.this, "No connection", Toast.LENGTH_LONG).show(); 

          } 


         } 
        } 
0

вызов этой функции:

 public static boolean isNetworkAvailable() 
    { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     HttpGet httpGet = new HttpGet("http://www.google.com"); 
     HttpParams httpParameters = new BasicHttpParams(); 
     int timeoutConnection = 1000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
     int timeoutSocket = 1500; 
     HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
     DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 
     try 
     { 
      httpClient.execute(httpGet); 
      return true; 
     } 
     catch(ClientProtocolException e) 
     { 
      e.printStackTrace(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    return false; 
    } 
Смежные вопросы