Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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
C# 如何首先在Xamarin.Android中以编程方式连接到特定的SSID?_C#_Android_Visual Studio_Xamarin.android - Fatal编程技术网

C# 如何首先在Xamarin.Android中以编程方式连接到特定的SSID?

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(

以编程方式将设备连接到特定SSID时出现问题。 我特别注意到: 如果我手动将设备连接到SSID(用我的小指向下滑动,在SSID上轻轻点击),那么我连接到该SSID的代码就会工作。 如果SSID是我的设备以前从未连接过的新SSID,则代码不起作用,但如果手动连接起作用。 这太奇怪了,我想不出怎么解决它

我使用的是Xamarin.Forms和Xamarin.Android,以及Android9.0API28-Pie

下面是我用来(尝试)连接的代码:

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;
    }