Как я могу проверить сетевое соединение в Android? - PullRequest
1 голос
/ 25 января 2012

Я разработал одно приложение, в котором мне нужно проверить, подключена ли сеть или нет, я использую следующий код, но он не работает.любой может решить мою проблему.мой код

public class AbcActivity extends Activity {
    Button b;
    private static final String tag = null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                netCheckin();
            }
        });
    }
        private void netCheckin() {

            try {

                ConnectivityManager nInfo = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                nInfo.getActiveNetworkInfo().isConnectedOrConnecting();

                Log.d(tag, "Net avail:"
                        + nInfo.getActiveNetworkInfo().isConnectedOrConnecting());

                ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                   Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show();
                    Log.d(tag, "Network available:true");

                } else {
                     Toast.makeText(getApplicationContext(), "net OFF", Toast.LENGTH_LONG).show();
                    Log.d(tag, "Network available:false");

                }

            } catch (Exception e) {
               Log.e("error",""+e);
            }
        }

    }

я дал android: name = "android.permission.ACCESS_NETWORK_STATE" /> в моем файле манифеста в приведенном выше коде, моя проблема заключается в том, что когда сеть включена или отключена, она выдает то же"net on" (тостовое сообщение).

Ответы [ 4 ]

1 голос
/ 25 января 2012
// check internet connectivity
public static boolean isNetworkAvailable(Context context) {

    boolean networkStatus;
    try {

        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();

        networkStatus = (activeNetworkInfo != null && activeNetworkInfo.isConnected()) ? true : false;

    } catch (Exception e) {

        e.printStackTrace();
        DinotaLogger.log(e, Level.SEVERE);
        networkStatus = false;

    }

    return networkStatus;
}

Пожалуйста, не забудьте указать файл манифеста.Если вы используете эмулятор, чтобы проверить это, нажмите F8, чтобы отключить доступ к сети.Это прекрасно работает с эмулятором Android 2.3.3.

1 голос
/ 25 января 2012

Просто попробуйте следующий код, чтобы вы могли проверить, подключен ли интернет или нет. Этот код работает для меня. Кроме того, вы можете проверить, подключен ли интернет через мобильный телефон, в роуминге или нет.

    int typeOfConnection = 0;
    //Gets the system service of the connectivity.
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = connectivityManager.getAllNetworkInfo();

    //Checks whether the connectivity type is WIFI or MOBILE.
    for (NetworkInfo networkInfo : netInfo)
    {
        if (networkInfo.getTypeName().equalsIgnoreCase("WIFI"))
            if (networkInfo.isConnected()){
                                     typeOfConnection = 1;
                 Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show();

            }
        if (networkInfo.getTypeName().equalsIgnoreCase("MOBILE"))
            if (networkInfo.isConnected()){
                                     typeOfConnection = 2;
                 Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show();

            }
    }

    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if(typeOfConnection== 2 && telephonyManager.isNetworkRoaming()){
        typeOfConnection = 3;
    }

    if(typeOfConnection == 0){
                Toast.makeText(getApplicationContext(), "net OFF", Toast.LENGTH_LONG).show();

    }

Всего наилучшего

1 голос
/ 25 января 2012

В верхней части вашего метода onCreate используйте

if(!checkInternetConnection()){
            // network connnectivity error , show some dialog here and exit from the app 

        }

где

private boolean checkInternetConnection() {

            ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            // ARE WE CONNECTED TO THE NET
            if (conMgr.getActiveNetworkInfo() != null
                    && conMgr.getActiveNetworkInfo().isAvailable()
                    && conMgr.getActiveNetworkInfo().isConnected()) {

                return true;

            } else {
                Log.v("", "Internet Connection Not Present");
                return false;
            }
        }

Надеюсь, это поможет вам.

1 голос
/ 25 января 2012

Я сделал это в моем приложении. Чтобы действительно проверить сетевое соединение, попробуйте пропинговать или разрешить DNS www.google.com :

  • Если эхо-запрос успешен, значит, у вас есть интернет-соединение
  • Если нет, у вас нет подключения к Интернету

@ Вакас, этот вопрос не касается ситуации, когда подключен к маршрутизатору, но нет доступа в Интернет , поскольку ConnectivityManager не различает сеть и подключение к Интернету.

...