Detect if android device is connected to the inter

2019-05-04 09:45发布

this is my class that checks if the device is connected to the internet.

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

}

then i call it here but it doesnt seem to return true or false. there are no errors and my app doesnt crash it just doesnt print anything out. anyone know why?

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");

    }
}

4条回答
我命由我不由天
2楼-- · 2019-05-04 10:15

call this function :

     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;
  }
查看更多
等我变得足够好
3楼-- · 2019-05-04 10:18

Create a class :

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();
    }
}

Then you call methode from activity, it will return true or false:

Utility.isNetworkAvailable(AnyActivity.this);

And don't forget to add permission to android manifest

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
查看更多
虎瘦雄心在
4楼-- · 2019-05-04 10:19

This isn't the correct approach to checking for internet connectivity. You should be using Android's built in ConnectivityManager class for this.

It's quite simple to use, you can simply do the following to check for network connectivity:

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

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

This will also allow you to determine things like the type of connection, if it's monitored, etc. so that you can make informed decisions about the network tasks you are executing.

There is more info in this lesson on the Android Developers site.

查看更多
趁早两清
5楼-- · 2019-05-04 10:25

You must do it in an asynctask. I use http://clients3.google.com/generate_204 to detect connection.

    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();

                            }


                        }
                    }
查看更多
登录 后发表回答