2015-11-26 73 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; 
} 

} 

然後我在這裏調用它,但它似乎沒有返回true或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-an-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(); 
    } 
} 

然後調用從活動梅索德,它將返回true或false:

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

這不是檢查互聯網連接的正確方法。你應該使用內置的ConnectivityManager類的Android。

它的使用很簡單,你可以簡單地做以下檢查網絡連接:

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

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

這也將讓您能夠確定的東西像連接的類型,如果是監控等等等等您可以對正在執行的網絡任務做出明智的決定。

Android Developers網站上有更多關於this lesson的信息。

+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; 
    }