android - WifiManager 将 SSID 设置为禁用而不是连接

标签 android android-wifi

我有一些代码应该获取通过 extra 在 Intent 中传递的 SSID 并连接到它,目前它只是将我传递给它的 SSID 设置为禁用。我试图通过的所有 SSID 之前都已连接。我不确定它的原因是否已经存在具有 SSID 的现有网络配置,但它可能与它有关...

package com.wt.checkin;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

public class WifiSwitcher extends BroadcastReceiver {

    @SuppressWarnings("static-access")
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Bundle extras = arg1.getExtras();
        WifiManager wifiMan = (WifiManager) arg0
                .getSystemService(Context.WIFI_SERVICE);
        if (wifiMan.getWifiState() == 1) {
            wifiMan.setWifiEnabled(true);
            try {
                Thread.currentThread().sleep(2500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        WifiConfiguration tmpConfig = new WifiConfiguration();
        tmpConfig.SSID = extras.getString("SSID");
        tmpConfig.status = WifiConfiguration.Status.ENABLED;
        int netId = wifiMan.addNetwork(tmpConfig);
        wifiMan.enableNetwork(netId, true);

    }

}

Disabled 这是工作代码:

package com.wt.checkin;

import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

public class WifiSwitcher extends BroadcastReceiver {

    @SuppressWarnings("static-access")
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Bundle extras = arg1.getExtras();
        WifiManager wifiMan = (WifiManager) arg0
                .getSystemService(Context.WIFI_SERVICE);
        if (wifiMan.getWifiState() == 1) {
            wifiMan.setWifiEnabled(true);
            try {
                Thread.currentThread().sleep(2500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }**
        WifiConfiguration Config = new WifiConfiguration();
        WifiInfo Info = wifiMan.getConnectionInfo();
        String SSID = extras.getString("SSID");
        Config.SSID = "\"" + SSID+"\"";
        wifiMan.addNetwork(Config);
        List<WifiConfiguration> list = wifiMan.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            if(i.SSID != null && i.SSID.equals("\"" + SSID + "\"")) {
                 wifiMan.disconnect();
                 wifiMan.enableNetwork(i.networkId, true);
                 wifiMan.reconnect();                

                 break;
            }           
         }

    }

}

最佳答案

对于遇到类似问题的其他人,我想发布这个相关问题:How do I connect to a specific Wi-Fi network in Android programmatically?

OP 看起来在做一些非常相似的事情,我注意到不同之处:

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

         break;
    }           
}

我标记了我认为应该添加的行。看起来您还必须以非常具体的方式格式化 SSID,这在其他 SO 线程中有所概述。

关于android - WifiManager 将 SSID 设置为禁用而不是连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833341/

相关文章:

Android MediaPlayer : Multiple sounds playing at the same time. 我的代码是

android - 通过足够快地单击按钮两次来绕过模态 Android 对话框?

android - 我可以在 Android 上同时打开 Wi-Fi 和蜂窝网络接口(interface)吗?

Android - 为什么 ConnectivityManager.isActiveNetworkMetered 总是返回 true(即使在 Wifi 上)

android - 是否可以为Android手机编写一个wifi破解工具?监控模式与多播?

android - Android NDK 中与 Unix 域的 LocalSocket 通信

Android ConstraintLayout - 如何将 View 移动到占用的空间?

java - 通过 Unicode 字符或其他方式在 Android TextView 中显示情感图标

android.net.wifi.STATE_CHANGE 并不总是在 wifi 切换时触发

android - android中的WiFi编程