Android 6:以编程方式无法连接到特定的wifi网络 [英] Android 6 : Connect to specific wifi network programmatically not working

查看:197
本文介绍了Android 6:以编程方式无法连接到特定的wifi网络的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过提供SSID并使用WifiManager配置进行传递来连接到wifi网络.

I am trying to connect to a wifi network by giving the SSID and pass using WifiManager configurations.

基于此线程解决方案: 如何连接到特定的Wi-Fi在Android中以编程方式连接网络?

Based on this threads solution: How do I connect to a specific Wi-Fi network in Android programmatically?

将调用reconnect方法.但没有任何反应(未连接).

The reconnect method is called. but nothing happens (not connected).

Android版本(6.0.1)是否有用? 如果是,那么如何在Android 6上以编程方式执行网络连接?

Is the Android version (6.0.1) for something? If yes then how to perform a network connection programmatically on Android 6?

推荐答案

自从Android棉花糖以来,有关如何连接WiFi网络的一些事情已经发生了变化. 以下代码将为您提供帮助...如果您使用的是Android 6.0或较低版本的版本...

A few things have changed about how you connect to a WiFi network since android Marshmallow. The following code will help you...If you are using Android 6.0 or lowlevel versions...

public void connectToWifi(){
    try{
        WifiManager wifiManager = (WifiManager) super.getSystemService(android.content.Context.WIFI_SERVICE);
        WifiConfiguration wc = new WifiConfiguration();
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        wc.SSID = "\"NETWORK_NAME\"";
        wc.preSharedKey = "\"PASSWORD\"";
        wc.status = WifiConfiguration.Status.ENABLED;
        wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

        wifiManager.setWifiEnabled(true);
        int netId = wifiManager.addNetwork(wc);
        if (netId == -1) {
            netId = getExistingNetworkId(wc.SSID);
        }
        wifiManager.disconnect();
        wifiManager.enableNetwork(netId, true);
        wifiManager.reconnect();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
private int getExistingNetworkId(String SSID) {
    WifiManager wifiManager = (WifiManager) super.getSystemService(Context.WIFI_SERVICE);
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
    if (configuredNetworks != null) {
        for (WifiConfiguration existingConfig : configuredNetworks) {
            if (existingConfig.SSID.equals(SSID)) {
                return existingConfig.networkId;
            }
        }
    }
    return -1;
}

并在清单文件中添加权限

And add permissions in the Manifest file

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

这篇关于Android 6:以编程方式无法连接到特定的wifi网络的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆