Как проверить доступ в Интернет (отправка и получение данных успешны) на Android?

привет, я хочу проверить, когда телефон или планшет подключен к сети (мобильной или Wi-Fi).

Имеет ли эта сеть доступ к Интернету, а также отправку и получение данных?

я использую этот код:

    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI")) {
            if (ni.isConnected()) {
                Toast.makeText(context,"WIFI CONNECTED",Toast.LENGTH_LONG).show();

                Boolean m = isOnline();
                Toast.makeText(context,String.valueOf(m),Toast.LENGTH_LONG).show(); 


            } else {
                Toast.makeText(context,"WIFI NOT CONNECTED AND AVAILABLE",Toast.LENGTH_LONG).show();    
            }


public boolean isOnline() {

    Runtime runtime = Runtime.getRuntime();
    try {

        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int     exitValue = ipProcess.waitFor();
        return (exitValue == 0);

    } catch (IOException e)          { e.printStackTrace(); } 
      catch (InterruptedException e) { e.printStackTrace(); }

    return false;
}

но всегда возвращает false

(я тестирую приложение в BlueStacks).

я тестирую все коды, которые существуют в stackoverflow


person Ahmad Hashemi    schedule 27.08.2015    source источник
comment
проверьте, полностью ли выполняется блок try..   -  person Lal    schedule 27.08.2015
comment
я проверяю это. это не работает для меня   -  person Ahmad Hashemi    schedule 27.08.2015
comment
Итак, он входит в блок улова .. не могли бы вы сказать, какой улов пойман? и строка, в которой произошло исключение   -  person Lal    schedule 27.08.2015
comment
добавьте log.e("TAG",e.printStackTrace()); в свой блок catch, чтобы показать ошибку в журнале.   -  person Mauker    schedule 27.08.2015


Ответы (1)


Прежде всего, попробуйте это, чтобы проверить, действительно ли вы подключены:

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

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

И чтобы получить тип соединения, попробуйте следующее:

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

Проверьте это изображение, чтобы увидеть другие типы подключения.

введите здесь описание изображения

Не забудьте добавить эту строку в свой манифест:

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

Подробнее об обучении.

Подробнее о ConnectivityManager здесь.


EDIT: Вы также можете попробовать что-то вроде:

ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();

if (info != null) {
    return info.isConnectedOrConnecting();
}

Второе редактирование: Да, вы также можете использовать свой подход "ping". Но... я не думаю, что это действительно необходимо, вы можете просто попробовать приведенные выше решения...

person Mauker    schedule 27.08.2015
comment
когда я комментирую эти строки // Boolean m = isOnline(); // Toast.makeText(context, String.valueOf(m),Toast.LENGTH_LONG).show(); проверьте, работает ли соединение Wi-Fi. - person Ahmad Hashemi; 27.08.2015