Wifi getSSID()返回null

时间:2013-03-29 18:40:27

标签: android wifi

一旦建立新连接,我就使用getSSID()来获取wifi网络的名称。 但有时我会为该值获取null。这是我的代码:

清单中的权限是正确的,因为正如我所说的,大多数时候它都有效。

我将此过滤器用于广播接收器:

<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />

在广播中我这样做:

if("android.net.wifi.supplicant.CONNECTION_CHANGE".equals(intent.getAction()))
{  boolean bConected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
   if(bConnected == true)
   {  WifiManager wifi = (WifiManager) Contexto.getSystemService(Context.WIFI_SERVICE);
      String MyName = wifi.getConnectionInfo().getSSID();
      Sometimes MyName is null here even if Wifi is connected correctly
   }
}

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我定期使用类似的代码,连接后我从未收到null

这是我的代码:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String myName = info.getSSID();

因此,我建议您在收到CONNECTION_CHANGE广播后等待400至1000毫秒左右,然后再请求提供信息。


以下是一个实现延迟的示例:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        String myName = info.getSSID();
    }
}, 1000);

答案 1 :(得分:3)

Android开发者网站声明:

  

如果当前没有网络连接,则SSID可能为空。

您正在收听CONNECTION_CHANGE事件,如果连接状态从已连接更改为已断开连接,该怎么办?

Wifi设备有时会从接入点断开连接,并且无需您发现它已断开连接,它们会以静默方式重新连接。

答案 2 :(得分:0)

我发现请求者子系统仅与WPA安全机制相关的困难方式,并且实际上不是用于监视一般wifi连接状态的好选择。文档中的措辞会让您相信它是可能的,但在尝试使用请求方操作时遇到了很多麻烦,包括与您描述的问题类似的问题。

来自SupplicantState枚举文件:

  

这些枚举值用于指示当前值   wpa_supplicant state。这比大多数用户更精细   有兴趣。一般来说,最好使用NetworkInfo.State。

使用NETWORK_STATE_CHANGED_ACTION并查看NetworkInfo额外信息,我能够获得预期的稳定行为。