2013-05-16 3 views
2

Я хочу, чтобы мое устройство Android подключалось к Wi-Fi-точке доступа. Я создал новый wificonfiguration и добавить его в wifimanager, это wificonfiguration имеет NetworkId .Затем я вызвать функцию wifi.enableNetwork(NetworkId, true).как проверить, действительно ли Wi-Fi подключен к Android

После этого, я думаю, что проситель будет проходить через получение IP-адреса, аутентификации, и, наконец, физически подключиться к горячая точка. Итак, есть ли способ определить, физически ли подключен Wi-Fi?

Я бы предпочел использовать подобный обработчику метод.

+1

Дубликат http://stackoverflow.com/questions/3841317/how-to-see-if -wifi-is-connected-in-android –

ответ

10

Вы можете попробовать это:

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

if (wifi.isConnected()) { 
    // Your code here 
} 

Edit: Подробнее:

Зарегистрируйте BroadcastReceiver в манифесте как так:

<receiver android:name="WifiReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     <action android:name="android.net.wifi.STATE_CHANGE"/> 
    </intent-filter> 
</receiver> 

Затем поместите код выше по методу onReceive() вашего приемника:

@Override 
public void onReceive(Context context, final Intent intent) { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    if (wifi.isConnected()) { 
     // Your code here 
    } 
} 
+0

действительно приятно! и спасибо за информацию о радиопередаче. – Adrian

+5

Обратите внимание: cm.getNetworkInfo теперь устарел. – chteuchteu

2

Это может вам помочь.

public static boolean isInternetAvailable(Context context) { 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 
    boolean connectionavailable = false; 
    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    NetworkInfo informationabtnet = cm.getActiveNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     try { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) haveConnectedMobile = true; 
      if (informationabtnet.isAvailable() 
       && informationabtnet.isConnected()) 
       connectionavailable = true; 
      Log.i("ConnectionAvailable", "" + connectionavailable); 
     } catch (Exception e) { 
      System.out.println("Inside utils catch clause , exception is" 
       + e.toString()); 
      e.printStackTrace(); 
     } 
    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 
6

Вы можете проверить всю сеть. Если вы хотите только WIFI, вы можете удалить проверку другой сети.

public static boolean hasInternetConnection() 
{ 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (wifiNetwork != null && wifiNetwork.isConnected()) 
    { 
     return true; 
    } 
    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (mobileNetwork != null && mobileNetwork.isConnected()) 
    { 
     return true; 
    } 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null && activeNetwork.isConnected()) 
    { 
     return true; 
    } 
    return false; 
} 

Не забудьте добавить следующее в манифесте:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
+0

Вам действительно нужно разрешение 'ACCESS_WIFI_STATE' для этого? Он работает на моем устройстве без этого. –

0

метод getNetworkInfo (НИТ) является устаревшим. Вы можете использовать что-то вроде этого

ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetwork != null) { 
     // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      // connected to wifi 

     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      // connected to the mobile network 
     } 
    } else { 
     // not connected to the internet 
    } 

Кроме того, необходимо добавить это разрешение под AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
Смежные вопросы