2012-01-10 19 views
28

Sto cercando di trovare se scanResult è la rete wifi attualmente connessa.come ottenere le attuali informazioni sulla connessione wifi in Android

Ecco il mio codice

public boolean IsCurrentConnectedWifi(ScanResult scanResult) 
{ 
    WifiManager mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiInfo currentWifi = mainWifi.getConnectionInfo(); 
    if(currentWifi != null) 
    { 
     if(currentWifi.getSSID() != null) 
     { 
      if(currentWifi.getSSID() == scanResult.SSID) 
      return true; 
     } 
    } 
    return false; 
} 

Non ho alcun problema a ottenere scanresult.

Sempre sto diventando correnteWifi è null.

Dove mi sbaglio o esiste un metodo alternativo per farlo?

risposta

50

Molto probabilmente avete già trovato risposta: currentWifi.getSSID() è quotato nella maggior parte dei casi in cui non è scanResult.SSID (e ovviamente non è necessario utilizzare == su stringhe :)).

provare qualcosa di simile, restituisce corrente SSID o null: sono richieste

public static String getCurrentSsid(Context context) { 
    String ssid = null; 
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (networkInfo.isConnected()) { 
    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
    if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) { 
     ssid = connectionInfo.getSSID(); 
    } 
    } 
    return ssid; 
} 

anche permesso:

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

StringUtil non è una classe standard di Android, in modo da poter utilizzare TextUtils invece. Il codice è quindi in questo modo:

public static String getCurrentSsid(Context context) { 
    String ssid = null; 
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (networkInfo.isConnected()) { 
    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
    if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) { 
     ssid = connectionInfo.getSSID(); 
    } 
    } 
    return ssid; 
} 
+2

fin d'ora 'connManager.getNetworkInfo (ConnectivityManager.TYPE_WIFI);' è ufficialmente deprecato. così triste. – guness

+0

'getNetworkInfo' è deprecato, usa' getActiveNetworkInfo' con 'networkInfo.getType() == ConnectivityManager.TYPE_WIFI' – zed

11

mio non deprecato, approccio modificato alla risposta corrente

public static String getCurrentSsid(Context context) { 
     String ssid = null; 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     if (networkInfo == null) { 
      return null; 
     } 

     if (networkInfo.isConnected()) { 
      final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
      final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
      if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) { 
       ssid = connectionInfo.getSSID(); 
      } 
     } 

    return ssid; 
} 
Problemi correlati