Как определить, когда WIFI-соединение установлено в Android? - PullRequest
130 голосов
/ 04 мая 2011

Мне нужно определить, когда у меня есть подключение к сети через WIFI. Какие широковещательные сообщения отправляются, чтобы установить, что установлено правильное сетевое соединение. Мне нужно проверить, что существует действительное сетевое соединение для HTTP. Что я должен слушать и какие дополнительные тесты мне нужно сделать, чтобы узнать, что существует действительное соединение.

Ответы [ 13 ]

2 голосов
/ 26 октября 2013

Я использовал этот код:

public class MainActivity extends Activity
    {
    .
    .
    .
    @Override
    protected void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        .
        .
        .
        }

    @Override
    protected void onResume()
        {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
        registerReceiver(broadcastReceiver, intentFilter);  
        }

    @Override
    protected void onPause()
        {
        super.onPause();
        unregisterReceiver(broadcastReceiver);
        }

    private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
        {
        @Override
        public void onReceive(Context context, Intent intent)
            {
            final String action = intent.getAction();
            if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))
                {
                if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false))
                    {
                    // wifi is enabled
                    }
                else
                    {
                    // wifi is disabled
                    }
                }
            }
        };
    }
2 голосов
/ 23 августа 2012

Вот пример моего кода, который учитывает предпочтение пользователей только разрешать передачу сообщений при подключении к Wi-Fi.

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

Обратите внимание, что NetworkInfo будет null, если нет какого-либо сетевого подключения.

private boolean canConnect()
{
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    boolean canConnect = false;
    boolean wifiOnly = SharedPreferencesUtils.wifiOnly();

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if(networkInfo != null)
    {
        if(networkInfo.isConnected())
        {
            if((networkInfo.getType() == ConnectivityManager.TYPE_WIFI) ||
               (networkInfo.getType() != ConnectivityManager.TYPE_WIFI && !wifiOnly))
            {
                canConnect = true;
            }
        }
    }

    return canConnect;
}
1 голос
/ 22 августа 2017

Для всех тех, кто наслаждается CONNECTIVITY_CHANGE трансляцией, обратите внимание, что это больше не срабатывает, когда приложение находится в фоновом режиме в Android O.

https://developer.android.com/about/versions/o/background.html

...