Android 为什么WifiManager.addNetwork返回一个网络ID,但随后将无法连接

Android 为什么WifiManager.addNetwork返回一个网络ID,但随后将无法连接,android,wifi,Android,Wifi,我正在使用WifiManager连接到网络或实际设备。它工作得很好,然后突然停止,代码没有变化。我确实开始使用不同的手机。我已经检查过了,我相信手机安装正确。当我调用addNetwork时,我会返回一个与当前网络ID不同的网络ID。当我运行enableNetwork,将addNetwork返回的网络ID传递给它时,我不会收到错误,但当我检查连接信息时,我仍然连接到原始网络。我连接的设备不需要用户或密码。 谁能告诉我我做错了什么 提前谢谢你能给我的任何帮助 我尝试在启用网络后立即重新连接,并尝试在

我正在使用WifiManager连接到网络或实际设备。它工作得很好,然后突然停止,代码没有变化。我确实开始使用不同的手机。我已经检查过了,我相信手机安装正确。当我调用addNetwork时,我会返回一个与当前网络ID不同的网络ID。当我运行enableNetwork,将addNetwork返回的网络ID传递给它时,我不会收到错误,但当我检查连接信息时,我仍然连接到原始网络。我连接的设备不需要用户或密码。 谁能告诉我我做错了什么

提前谢谢你能给我的任何帮助

我尝试在启用网络后立即重新连接,并尝试在连接到新网络之前断开与当前网络的连接

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.util.Log;

public class DeviceConnect extends AsyncTask<String, String, String> {
    public interface AsyncResponse {
        void processFinish(String output);
    }

    public AsyncResponse delegate = null;

    public DeviceConnect(AsyncResponse delegate){
        this.delegate = delegate;
    }

    private Context _context = null;
    private String _result = null;
    private WiFiHandler _wifiHandler = null;

    public void setContext(Context value) {
        this._context = value;
    }
    public String getResult() {
        return this._result;
    }

    @Override
    protected String doInBackground(String... params) {
        String message = null;
        boolean ok = true;
        String device = params[0];
        this._result = null;

        this._wifiHandler = new WiFiHandler();
        if (!device.isEmpty()) {
            int netID = 0;
            WifiManager wifi = (WifiManager) this._context.getSystemService(Context.WIFI_SERVICE);
            WifiConfiguration config;
            WifiInfo connInfo;

            config = new WifiConfiguration();
            config.SSID = device;
            wifi.disconnect();
            netID = wifi.addNetwork(config);
Log.e("doInBackground", "netID: " + netID);
            if (netID > 0) {
                try {
                    wifi.enableNetwork(netID, true);
                } catch (Exception ex) {
                    ok = false;
                    this._result = device + " - Add network failed (2)";
                }
                if(ok) {
                    connInfo = wifi.getConnectionInfo();
Log.e("doInBackground", connInfo.getSSID() + " - " + connInfo.getNetworkId());
                    if (connInfo != null && connInfo.getSSID().equalsIgnoreCase(device)) {  // || (netID = connInfo.getNetworkId()) <= 0) {
                        this._result = "SUCCESS";
                    } else {
                        this._result = device + " - Add device failed (3)";
                    }
                }
            } else {
                this._result = device + " - Add device failed (1)";
            }
        } else {
            this._result = "No device to configure";
        }

        return this._result;
    }

    @Override
    public void onPostExecute(String result) {
        delegate.processFinish(result);
    }
}

它应该连接到设备并返回成功。对于我需要做的事情,我将只与设备连接一秒钟左右。

经过几个小时的尝试和失败,我终于找到了答案。这显然是个时间问题。下面的代码解决了我的问题

            Object lock = new Object();
            lock = wifi.enableNetwork(netID, true);
            synchronized(lock) {
                lock.wait(500);
            }

你能解释一下它为什么起作用吗?看来只是堵住了线