Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin:当尝试连接物联网模块中的wifi时,android 10中会出现多个请求网络弹出窗口_Xamarin_Iot_Esp8266_Android Wifi - Fatal编程技术网

Xamarin:当尝试连接物联网模块中的wifi时,android 10中会出现多个请求网络弹出窗口

Xamarin:当尝试连接物联网模块中的wifi时,android 10中会出现多个请求网络弹出窗口,xamarin,iot,esp8266,android-wifi,Xamarin,Iot,Esp8266,Android Wifi,我正在开发一个带有wifi连接的物联网模块,我正在使用三星安卓10进行测试。 该芯片是ESP8266。Wi-Fi信号没有互联网连接。 该项目在xamarin开发 问题是当我尝试连接到设备的信号时。当我发出连接请求时,设备中会出现多个弹出窗口,请求连接,它不会等到连接完成,设备会立即一次又一次地启动连接请求,最终崩溃 当我调试时,NetworkAvailable会运行,但即使手机没有完成与信号的连接,手机也会再次启动一个新的请求网络,不要等到您实际连接,我不知道为什么会启动多个请求 这是我的密码

我正在开发一个带有wifi连接的物联网模块,我正在使用三星安卓10进行测试。 该芯片是ESP8266。Wi-Fi信号没有互联网连接。 该项目在xamarin开发

问题是当我尝试连接到设备的信号时。当我发出连接请求时,设备中会出现多个弹出窗口,请求连接,它不会等到连接完成,设备会立即一次又一次地启动连接请求,最终崩溃

当我调试时,NetworkAvailable会运行,但即使手机没有完成与信号的连接,手机也会再次启动一个新的请求网络,不要等到您实际连接,我不知道为什么会启动多个请求

这是我的密码

 public async Task<bool> Connect(string WiFiName, string WifiPassword)
        {
            bool result = false;
            var formattedSsid = $"\"{WiFiName}\"";
            var formattedPassword = $"\"{WifiPassword}\"";
    
            try
            {
               
                    AutoResetEvent autoResetEvent = new AutoResetEvent(false);
    
                    var wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
                    .SetSsid(WiFiName)
                    .SetWpa2Passphrase(WifiPassword)
                    .Build();
    
                    var networkRequest = new NetworkRequest.Builder()
                    .AddTransportType(TransportType.Wifi) // we want WiFi
                    .SetNetworkSpecifier(wifiNetworkSpecifier) // we want _our_ network
                    .Build();
    
                    UnregisterNetworkCallback(_networkCallback);
    
                    _networkCallback = new NetworkCallback()
                    {
                        NetworkAvailable = network =>
                        {
                            result = true;
                            autoResetEvent.Set(); //signal
                        },
                        NetworkUnavailable = () =>
                        {
                            result = false;
                            autoResetEvent.Set(); //signal
                        },
                    };
    
                    connectivityManager.RequestNetwork(networkRequest, _networkCallback);
    
                    autoResetEvent.WaitOne();
    
               
            }
            catch (Exception e)
            {
                Crashes.TrackError(e);
               
            }
            finally
            {
            }
    
            return result;
        }
    
        private void UnregisterNetworkCallback(NetworkCallback _networkCallback)
        {
            if (_networkCallback != null)
            {
                try
                {
                    _connectivityManager.UnregisterNetworkCallback(_networkCallback);
    
                }
                catch (Exception) {
                } finally
                {
                    _networkCallback = null;
                }
            }
        }
    
    
    public class NetworkCallback : ConnectivityManager.NetworkCallback
    {
        public Action<Network> NetworkAvailable { get; set; }
        public Action NetworkUnavailable { get; set; }
    
        public NetworkCallback()
        {
         
        }
    
        public override void OnAvailable(Network network)
        {
            try
            {
                WiFiAndroid.connectivityManager.BindProcessToNetwork(null);
                WiFiAndroid.connectivityManager.BindProcessToNetwork(network);
            }
            catch (Exception ex)
            {
                var error = ex;
            }
        }
    
        public override void OnUnavailable()
        {
            base.OnUnavailable();
            NetworkUnavailable?.Invoke();
        }
    }
公共异步任务连接(字符串WiFiName,字符串WifiPassword)
{
布尔结果=假;
var formattedSsid=$“\”{WiFiName}\”;
var formattedPassword=$“\”{WifiPassword}\”;
尝试
{
AutoResetEvent AutoResetEvent=新的AutoResetEvent(假);
var wifinetworksspecifier=new wifinetworksspecifier.Builder()
.SetSsid(WiFiName)
.SetWpa2Passphrase(WifiPassword)
.Build();
var networkRequest=new networkRequest.Builder()
.AddTransportType(TransportType.Wifi)//我们需要Wifi
.SetNetworkSpecifier(WifineTworksSpecifier)//我们想要我们的网络
.Build();
取消注册networkCallback(\u networkCallback);
_networkCallback=新的networkCallback()
{
网络可用=网络=>
{
结果=真;
autoResetEvent.Set();//信号
},
网络不可用=()=>
{
结果=假;
autoResetEvent.Set();//信号
},
};
RequestNetwork(networkRequest,_networkCallback);
autoResetEvent.WaitOne();
}
捕获(例外e)
{
轨迹误差(e);
}
最后
{
}
返回结果;
}
私有无效取消注册NetworkCallback(NetworkCallback\u NetworkCallback)
{
如果(_networkCallback!=null)
{
尝试
{
_ConnectionManager.UnregisterNetworkCallback(\u networkCallback);
}
捕获(例外){
}最后
{
_networkCallback=null;
}
}
}
公共类NetworkCallback:ConnectivityManager.NetworkCallback
{
公共操作网络可用{get;set;}
公共操作网络不可用{get;set;}
公用网络回调()
{
}
公共覆盖无效OnAvailable(网络)
{
尝试
{
WiFiAndroid.connectivityManager.BindProcessToNetwork(null);
WiFiAndroid.connectivityManager.BindProcessToNetwork(网络);
}
捕获(例外情况除外)
{
var误差=ex;
}
}
public override void OnUnavailable()
{
base.OnUnavailable();
网络不可用?.Invoke();
}
}

图像,是一次又一次的请求