2012-04-05 72 views
2

我想寫一些代碼,將斷開當前的WiFi網絡(如果有的話),並重新連接到已知的SSID特定的WiFi網絡。Android快速切換到已知的無線網絡

我一直在使用這裏使用的代碼; How do I connect to a specific Wi-Fi network in Android programmatically?

它可以工作,但連接需要幾秒鐘,最多約10秒鐘。

具體來說,我使用的代碼如下;

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration config; 

我獲得的配置,無論是通過創建一個新的和設置SSID和KeyMgmt爲NONE,然後將它添加;

wifiManager.add(config); 

或者通過獲取已存在的配置;

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
for(WifiConfiguration i : list) { 
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { 
     config = i; 
     break; 
    }   
} 

然後我打電話;

wifiManager.disconnect(); 
wifiManager.enableNetwork(i.networkId, true); 
wifiManager.reconnect(); 

我收到檢查無線網絡連接狀態的廣播,當我得到一個連我正確的SSID我可以繼續,但是,這個過程需要高達10秒,我怎麼可以設置config或wifimanager連接這更快?

感謝

+0

您是否找到了您的問題的答案?你有沒有試過關閉DHCP來改善連接所需的時間?我想做同樣的事情,以快速消費託管在不同網絡中的服務,我在想mDNS。 – 2017-01-30 06:28:36

+0

@Hamid此代碼是否適用於您,從一個網絡切換到另一個網絡? – 2017-04-09 07:07:28

+0

使用此代碼,再次重新連接到同一網絡 – 2017-04-09 07:08:39

回答

1

我覺得這個代碼是幫助你..

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.network_test); 
    context = this; 
    mUpdate = new UpdateTimeTask(); 
    mHandler = new Handler(); 
    mHandler.post(mUpdate); 
    } 
public Boolean isNetAvailable(Context con) { 
    try{ 
     connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifiInfo.isConnected() || mobileInfo.isConnected()) { 
      return true; 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
      } 
    return false; 
    } 
private class UpdateTimeTask implements Runnable{ 

    public void run() { 
     boolean net = isNetAvailable(context); 


     if(net != false) { 
     Toast.makeText(getBaseContext(), "network Available", Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      Toast.makeText(getBaseContext(), "network Not Available", Toast.LENGTH_SHORT).show(); 
     } 
     mHandler.postDelayed(mUpdate, 30000); 
    } 
} 

}

+0

對不起,我不明白這與我的問題有什麼關係。這不是互聯網是否連接,我需要知道,我已經可以做到這一點,這是代碼似乎做的。我需要一種快速切換wifi的方式,比我使用的當前方法更快,這需要很長時間才能關聯。 – Hamid 2012-04-05 16:13:00

-1

您是否嘗試過加入startScan()到你的日常迫使可用網絡立即重新掃描的時間你想連接?我想象一下,使用alarmManager或類似的東西重複強制執行該命令是可能的,但我認爲這有可能導致性能/電池價格昂貴。如果你有一個特定的觸發器,它可能是一個解決方案。

請看這裏:http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()

+0

掃描不是問題。這個問題現在有點老了,但我相信,雖然我不記得,但它是通過靜態設置IP解決的,因此它不依賴於DHCP來分配IP,這需要時間。 – Hamid 2014-02-24 12:00:39