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