2012-04-05 55 views
2

現在のWi-Fiネットワーク(存在する場合)を切断し、既知のSSIDを持つ特定のWi-Fiネットワークに再接続するコードを作成しようとしています。既知のWi-Fiネットワークへの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); 

、またはすでに存在する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(); 

私は放送は無線LANの状態をチェック受けていると私は続けることができ、私の正しいSSIDの接続を取得するときに私が接続するための設定やwifimanagerを設定することができますどのように、しかし、このプロセスは、10秒件までかかりますこれははるかに迅速に?私はこのコードはあなたに助けだと思う​​

おかげ

+0

、あなたの質問に対する答えを見つけますか?あなたは接続にかかる時間を改善するためにdhcpをオフにしてみましたか?私は別のネットワークでホストされているサービスをすばやく消費するために同じことをしたい、私はmDNSを考えている。 –

+0

@Hamidこのコードはあなたのために、あるネットワークから別のネットワークに切り替えることはできますか? –

+0

このコードを使用して、再度同じネットワークに再接続してください –

答えて

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

-1

あなたが一度に利用可能なネットワークのための即時の再スキャンを強制するために、あなたのルーチンにstartScan()を追加しようとしたことがありあなたは接続したいですか? alarmManagerなどでそのコマンドを繰り返し実行することは可能だと思いますが、高性能/バッテリの影響を受ける可能性があります。特定のトリガをお持ちの場合は、解決策になる可能性があります。

はこちらをご覧ください:http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()

+0

スキャンは問題ではありませんでした。質問はちょっと古いですが、思い出せませんが、静的にIPを設定してDHCPでDHCPを割り当てて時間を割いていないようにして解決したと思います。 – Hamid

関連する問題