2016-03-06 117 views
-1

我一直试图通过使用WifiManager类连接到在另一个设备上创建的HotSpot。我已经完成并使用了这个answer的代码。所以最后我的代码看起来是这样的:无法以编程方式连接到WIFI网络

for(ScanResult i : list) { 
     Toast.makeText(context, i.SSID, Toast.LENGTH_SHORT).show(); 
     if(i.SSID != null && (i.SSID.startsWith("SMSKCM877-") && i.SSID.endsWith("-MSDBP2016"))) { 
      // Toast.makeText(context, "Found Match", Toast.LENGTH_SHORT); 
      conf.SSID="\""+i.SSID+"\""; 
      conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
      wifiManager.addNetwork(conf); 
      int networkID=wifiManager.addNetwork(conf); 
      wifiManager.disconnect();    
      wifiManager.enableNetwork(networkID, true); 
      wifiManager.reconnect();  
      String ipStr=""; 
      DhcpInfo sinfo=wifiManager.getDhcpInfo(); 
      int ip=sinfo.serverAddress; 
      ipStr = String.format("%d.%d.%d.%d", 
          (ip & 0xff), 
          (ip >> 8 & 0xff),    
          (ip >> 16 & 0xff),  
          (ip >> 24 & 0xff)); 
      Log.e("sg", ipStr);         
      Toast.makeText(context, ipStr+"", Toast.LENGTH_LONG).show();    
      startConnect s=new startConnect(ipStr,context); 
      s.execute(); 
      return true; 
     }   
    } 

但我面临的问题是,当我试图连接的第一次产生的ipstr始终是0.0.0.0。重试几次给了我正确的地址,之后一切顺利。任何想法为什么会出现此问题?

在此先感谢。

回答

0

只需注册广播接收器WifiManager.NETWORK_STATE_CHANGED_ACTION并等待CONNECTED事件。

IntentFilter intentfilterState = (IntentFilter)new IntentFilter(); 
intentfilterState.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 

BroadcastReceiver nsca = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //your code goes here 
     } 
} 

_context.registerReceiver(nsca, intentfilterState); 
相关问题