问题描述
我正在开发具有 wifi 连接的 IOT 模块,我正在使用带有 android 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();
}
}
形象,是一遍遍的请求。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)