2012-04-05 5 views
2

Ich versuche, etwas Code zu schreiben, der aktuelle Wifi-Netzwerk (falls vorhanden) trennen und wieder mit einem bestimmten WLAN-Netzwerk mit bekannten SSID verbinden wird.Android schneller Wechsel zu bekannten Wifi-Netzwerk

Ich habe den hier verwendeten Code verfolgt; How do I connect to a specific Wi-Fi network in Android programmatically?

was funktioniert, aber die Verbindung dauert einige Sekunden, bis zu etwa 10 Sekunden.

Insbesondere verwende ich den Code wie folgt;

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

I erhalten, die Config, ob durch einen neuen zu schaffen und die SSID und KeyMgmt auf NONE Einstellen und Hinzufügen dann;

wifiManager.add(config); 

oder indem Sie eine Konfiguration erhalten, die bereits existiert;

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

Dann rufe ich an;

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

Ich habe eine Sendung empfangen den WLAN-Status überprüft und, wenn ich einen angeschlossenen für meine richtige SSID bekomme ich weiter, aber dieser Prozess dauert bis zu 10 Sekunden, wie kann ich die Config oder wifimanager einrichten verbinden um so viel schneller?

Dank

+0

Haben Sie die Antwort auf Ihre Frage gefunden? Haben Sie versucht, das DHCP auszuschalten, um die Verbindungszeit zu verlängern? Ich möchte das gleiche tun, um schnell einen Dienst zu nutzen, der in einem anderen Netzwerk gehostet wird, ich denke an mDNS. –

+0

@Hamid Funktioniert dieser Code für Sie, um von einem Netzwerk zu einem anderen zu wechseln? –

+0

Mit diesem Code wieder verbindet sich wieder mit demselben Netzwerk –

Antwort

1

Ich denke, dieser Code helfen Sie ist ..

@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

Sorry, ich sehe nicht, wie das für meine Frage relevant ist. Es ist nicht, ob das Internet verbunden ist, dass ich wissen muss, ich kann das schon tun, was dieser Code zu tun scheint. Ich brauche eine Möglichkeit, schnell das WLAN zu wechseln, schneller als die aktuelle Methode, die ich brauche, die eine Weile dauert, um zu verbinden. – Hamid

-1

Haben Sie startScan() zu Ihrer Routine zu zwingen, sofort Rescan nach verfügbaren Netzwerken zu der Zeit versucht, indem du willst dich verbinden? Ich stelle mir vor, diesen Befehl wiederholt mit einem AlarmManager oder etwas Ähnlichem zu erzwingen, aber ich denke, das hat das Potenzial, eine teure Leistung/Batterie zu haben. Wenn Sie einen bestimmten Auslöser haben, könnte dies eine Lösung sein.

Siehe hier: http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()

+0

Das Scannen war nicht das Problem. Die Frage ist jetzt ein wenig alt, aber ich glaube, obwohl ich mich nicht erinnern kann, dass sie gelöst wurde, indem ich die IP statisch so einstellte, dass sie nicht auf DHCP angewiesen war, um eine zu vergeben, was Zeit kostete. – Hamid