C# 如何首先在Xamarin.Android中以编程方式连接到特定的SSID?
以编程方式将设备连接到特定SSID时出现问题。 我特别注意到: 如果我手动将设备连接到SSID(用我的小指向下滑动,在SSID上轻轻点击),那么我连接到该SSID的代码就会工作。 如果SSID是我的设备以前从未连接过的新SSID,则代码不起作用,但如果手动连接起作用。 这太奇怪了,我想不出怎么解决它 我使用的是Xamarin.Forms和Xamarin.Android,以及Android9.0API28-Pie 下面是我用来(尝试)连接的代码:C# 如何首先在Xamarin.Android中以编程方式连接到特定的SSID?,c#,android,visual-studio,xamarin.android,C#,Android,Visual Studio,Xamarin.android,以编程方式将设备连接到特定SSID时出现问题。 我特别注意到: 如果我手动将设备连接到SSID(用我的小指向下滑动,在SSID上轻轻点击),那么我连接到该SSID的代码就会工作。 如果SSID是我的设备以前从未连接过的新SSID,则代码不起作用,但如果手动连接起作用。 这太奇怪了,我想不出怎么解决它 我使用的是Xamarin.Forms和Xamarin.Android,以及Android9.0API28-Pie 下面是我用来(尝试)连接的代码: public int ConnectToSSID(
public int ConnectToSSID(字符串SSID,字符串密码)
{
var-wifiConfiguration=新的wifiConfiguration();
wifiConfiguration.Ssid='“'+Ssid+'”;
如果(password.Length>0)
{
wifiConfiguration.PreSharedKey='“'+密码+'”;
}
if(wifiManager==null)
{
wifiManager=(wifiManager)context.GetSystemService(context.WifiService);
}
wifiManager.AddNetwork(wifiConfiguration);
IList list=wifiManager.ConfiguredNetworks;
foreach(列表中的WifiConfiguration conf)
{
如果(conf.Ssid.Equals(“”+Ssid+“”))
{
wifiManager.Disconnect();
EnableNetwork(conf.NetworkId,true);
wifiManager.Reconnect();
返回1;
}
}
返回0;
}
要以编程方式连接到特定的SSID,请尝试使用以下代码
string ssid = "\"" + _ssid + "\"";
string password = "\"" + _password + "\"";
var wifiConfig = new WifiConfiguration
{
Ssid = ssid,
PreSharedKey = password
};
var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(WifiService);
var addNetwork = wifiManager.AddNetwork(wifiConfig);
var list = wifiManager.ConfiguredNetworks;
foreach (var wifiConfiguration in list)
{
if (wifiConfiguration.Ssid != null && WifiConfiguration.Ssid.Equals("\"" + _ssid + "\""))
{
wifiManager.Disconnect();
wifiManager.EnableNetwork(WifiConfiguration.NetworkId, true);
wifiManager.Reconnect();
break;
}
}
好的,我发现了真正的问题:WifiManager类无法添加新的WifiConfiguration。 然后,从未从ConfiguredNetworks列表中选择配置,也从未连接到它 要解决此问题,必须指定要连接到的wific配置的安全性 请注意对API所做的更改,因为文档建议使用:
WifiConfiguration conf = new WifiConfiguration();
conf.AllowedKeyManagement.Set(WifiConfiguration.[KEY_MANAGEMENT_CONST]);
但这不再有效,您必须使用:
WifiConfiguration conf = new WifiConfiguration();
conf.AllowedKeyManagement.Set((int)KeyManagementType.[KEY_MANAGEMENT_CONST]);
现在,我的连接方法是:
public int ConnectToSSID(string SSID, string password)
{
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.Ssid = '"' + SSID + '"';
wifiConfiguration.AllowedKeyManagement.Set((int)KeyManagementType.None);
wifiManager = (WifiManager)context.GetSystemService(Context.WifiService);
var addNet = wifiManager.AddNetwork(wifiConfiguration);
if (addNet == -1)
{
addNet = wifiManager.UpdateNetwork(wifiConfiguration);
}
if (addNet == -1)
{
return 0; //Error!
}
var list = wifiManager.ConfiguredNetworks;
foreach (WifiConfiguration conf in list)
{
if (conf.Ssid.Equals('"' + SSID + '"'))
{
wifiManager.Disconnect();
wifiManager.EnableNetwork(conf.NetworkId, true);
wifiManager.Reconnect();
return 1;
}
}
return 0;
}
不,它不工作,除非我通过设置>Wi-Fi>mySSID进行第一次连接。然后,在第一次与网络关联后,它就会工作。请确保您添加了所需的权限,例如:
。我在我这边测试了代码,它运行良好。是的,我添加了所需的权限。然而,我刚才注意到一件事,在调用wifiManager.addNetwork(wifiConfig)之后;我想亲自用记录器检查配置了网络的列表,但没有添加网络。为什么?你以前初始化过吗if(wifiManager==null)
检查wifiManager实例是否正确。尝试使用以下代码获取WifiManager<代码>var wifiManager=(wifiManager)Android.App.Application.Context.GetSystemService(WifiService)代码>我根据您的建议更改了代码并添加了一个日志,现在代码是:'wifiManager=(wifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);Debug.WriteLine(wifiManager.ToString());var addNetwork=wifiManager.addNetwork(wifiConfiguration);Debug.WriteLine(“ID==”+addNetwork);”。结果是“[0:]android.net.wifi”。WifiManager@18f0dca8[0:]ID==-1'。所以AddNetwork方法失败了,我想。不过,非常感谢您抽出时间。
public int ConnectToSSID(string SSID, string password)
{
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.Ssid = '"' + SSID + '"';
wifiConfiguration.AllowedKeyManagement.Set((int)KeyManagementType.None);
wifiManager = (WifiManager)context.GetSystemService(Context.WifiService);
var addNet = wifiManager.AddNetwork(wifiConfiguration);
if (addNet == -1)
{
addNet = wifiManager.UpdateNetwork(wifiConfiguration);
}
if (addNet == -1)
{
return 0; //Error!
}
var list = wifiManager.ConfiguredNetworks;
foreach (WifiConfiguration conf in list)
{
if (conf.Ssid.Equals('"' + SSID + '"'))
{
wifiManager.Disconnect();
wifiManager.EnableNetwork(conf.NetworkId, true);
wifiManager.Reconnect();
return 1;
}
}
return 0;
}