2016-12-22 6 views
1

wifimanagerを使用して特定のWi-Fiネットワークに接続するアンドロイドスタジオでアプリを作っています。設定済みのネットワークからネットワークを削除し、他のすべてのネットワークを有効にしてください

アプリを閉じると、Wi-Fiネットワークが設定から削除され、他のすべてのWi-Fiネットワークが有効になります。例えば

  1. 私は無線LANネットワークに接続されています:networkA
  2. 私はwifimanagerがWiFiネットワークに接続するアプリ
  3. を開く:networkB
  4. 私は
  5. アプリを閉じますwifimanagerはネットワークBを切断して設定から削除します

これ以降、私の電話機は、最適な信号で設定されたネットワークに自動的に接続されます。 (この場合はnetworkA)

私はアプリを閉じるとネットワークBの接続を切断しますが、私の電話機のWiFiネットワークタブを開くと、networkAの状態として「無効」と表示されます。

もう一度networkAを有効にするにはどうすればよいですか?

私はwifiManager.enableNetwork(networkBid, false)をやろうとしましたが、アプリを起動してnetworkAに接続し直してから、それ以降はnetworkAに再接続します。

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

私は解決策を見つけた:

私はnetworkBに接続する前に、現在のネットワークID(networkA)を取得します。

アプリを終了すると、networkAに再接続します。

スマートフォンがどのネットワークにも接続できるように、すべてのネットワークを無効にするのではなく、良い方法です。

関連する問題