2016-12-22 6 views
1

Я делаю приложение в студии Android, которая подключается к определенной сети Wi-Fi, используя wifimanager.Удалите сеть из настроенных сетей и включите все остальные сети.

Когда я закрываю приложение, я хочу, чтобы он удалил Wi-Fi-сеть из конфигурации и включил все другие Wi-Fi-сети.

Например:

  1. Я подключен к сети WiFi: networkA
  2. я открыть приложение
  3. wifimanager подключается к Wi-Fi сети: networkB
  4. я закрыть приложение
  5. The wifimanager отключает сетьB и удаляет ее из конфигурации

После этого я хочу, чтобы мой телефон автоматически подключался к настроенной сети с лучшим сигналом. (networkA в этом случае)

Когда я закрываю приложение, он отключает сеть B, но если я открою вкладку сети Wi-Fi на своем телефоне, в ней будет указано состояние «Отключено» как состояние сети.

Как снова включить networkA?

Я попытался сделать wifiManager.enableNetwork(networkBid, false), но он просто отключит networkA после открытия приложения и снова подключится к сетиA после этого.

MainActivity.java:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myWebView = (WebView) findViewById(R.id.activity_main); 
    myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    }); 

    WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
    WifiConfiguration conf = new WifiConfiguration(); 

    int WDTWifiCount = 0; 
    List<ScanResult> results = wifiManager.getScanResults(); 
    for (ScanResult scanResult : results) { 
     if (scanResult.SSID.contains("WDT_")) { 
      SSIDList.add(WDTWifiCount, scanResult.SSID); 
      WDTWifiCount++; 
     } 
    } 

    if (WDTWifiCount < 1) { 
     startActivityForResult(new Intent(this, NoWifi.class), 2); 
    } else if (WDTWifiCount > 1) { 
     Intent intent = new Intent(this, MultipleWifi.class); 
     intent.putStringArrayListExtra("SSIDList", (ArrayList<String>) SSIDList); 
     startActivityForResult(intent, 1); 
    } else if (WDTWifiCount == 1) { 
     networkSSID = SSIDList.get(0); 
     if (networkSSID.length() == 8) { 
      networkPass = "24816"; 
     } else if (networkSSID.length() == 9) { 
      networkPass = "248163264"; 
     } 
     conf.SSID = "\"" + networkSSID + "\""; 
     conf.preSharedKey = "\"" + networkPass + "\""; 

     wifiManager.addNetwork(conf); 

     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for (WifiConfiguration i : list) { 
      if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { 
       wifiManager.disconnect(); 
       wifiManager.enableNetwork(i.networkId, true); 
       wifiManager.reconnect(); 

       break; 
      } 
     } 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setUseWideViewPort(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setBuiltInZoomControls(true); 
     myWebView.setWebChromeClient(new WebChromeClient()); 
     if (networkSSID.length() == 9) { 
      myWebView.loadUrl("http://192.168.1.1/index.html"); 
     } else if (networkSSID.length() == 8) { 
      myWebView.loadUrl("http://192.168.1.3/home.htm"); 
     } 
    } 
} @override public void onBackPressed() { 
    String webUrl = myWebView.getUrl(); 
    if (webUrl.equals("http://192.168.1.1/index.html") || webUrl.equals("http://192.168.1.3/home.htm") || webUrl == null) { 
     WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 

     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for (WifiConfiguration i : list) { 
      if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { 
       wifiManager.disconnect(); 
       networkID = i.networkId; 
       break; 
      } 
     } 
     wifiManager.removeNetwork(networkID); 
     super.onBackPressed(); 
    } else { 
     myWebView.goBack(); 
    } 
} 

ответ

0

Я нашел решение:

Я получаю текущий сетевой идентификатор (networkA) перед подключением к networkB.

После закрытия приложения он снова подключается к сети.

Я бы предпочел, чтобы он не отключил каждую сеть, чтобы смартфон мог подключаться к любой сети, но это хорошая альтернатива.

Смежные вопросы