java - 从配置的网络中删除网络并启用所有其他网络

标签 java android android-studio wifimanager

我正在 android studio 中制作一个应用程序,它使用 wifimanager 连接到特定的 wifi 网络。

当我关闭应用程序时,我希望它从配置中删除 wifi 网络并启用所有其他 wifi 网络。

例如:

  1. 我已连接到 WiFi 网络:networkA
  2. 我打开应用
  3. wifimanager 连接到 wifi 网络:networkB
  4. 我关闭应用
  5. wifimanager 断开 networkB 的连接并将其从配置中删除

此后,我希望我的手机自动连接到已配置的具有最佳信号的网络。 (本例中为网络A)

当我关闭应用程序时,它会断开网络 B 的连接,但如果我打开手机上的 wifi 网络选项卡,它会显示网络 A 的状态为“已禁用”。

如何再次启用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();
    }
}

最佳答案

我找到了解决方案:

在连接到 networkB 之前,我获取了当前的网络 ID (networkA)。

关闭应用程序后,它重新连接到网络A。

我宁愿它不要禁用每个网络,以便智能手机可以连接到任何网络,但它是一个很好的选择。

关于java - 从配置的网络中删除网络并启用所有其他网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41283391/

相关文章:

java - Android Studio : How to design my own theme?

java - 有条件地 Autowiring Spring 数据存储库

java - 当 try 和 finally block 都抛出异常时 try-catch-finally block 的行为?

java - 从 Assets 文件夹中的文本文件加载数组 (Android)

java - Android - Activity 中方法的单元测试

android - Protobuffers错误将库添加到android

android - 如何在 Android Studio 中使用 aar 的依赖项?

java - java 是否在 for 循环中缓存数组引用?

java - 使用 HTTPS URL 连接到远程 mysql 数据库

java - 带有自定义对象的可扩展 ListView