首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 6:以编程方式连接到特定的wifi网络无法工作

Android 6:以编程方式连接到特定的wifi网络无法工作
EN

Stack Overflow用户
提问于 2016-02-22 01:17:36
回答 7查看 20K关注 0票数 5

我正在尝试通过使用WifiManager配置提供SSID和pass来连接到wifi网络。

基于这个线程解决方案:How do I connect to a specific Wi-Fi network in Android programmatically?

将调用重新连接方法。但没有发生任何事情(未连接)。

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

EN

回答 7

Stack Overflow用户

发布于 2017-06-12 17:27:49

自从安卓棉花糖以来,你连接WiFi网络的方式发生了一些变化。以下代码将帮助您使用Android6.0或更低版本的you...If ...

代码语言:javascript
复制
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;
}

并在清单文件中添加权限

代码语言:javascript
复制
<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" />
票数 12
EN

Stack Overflow用户

发布于 2016-03-07 22:08:24

使用addNetwork添加wifi配置,然后使用enableNetwork连接到它。

代码语言:javascript
复制
    WifiConfiguration wificonfiguration = new WifiConfiguration();
    StringBuffer stringbuffer = new StringBuffer("\"");
    stringbuffer.append((new StringBuilder(String.valueOf(HOTSPOT_NAME))).append("\"").toString());
    wificonfiguration.SSID = stringbuffer.toString();
    wificonfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
    wificonfiguration.allowedAuthAlgorithms.set(0);
    wificonfiguration.status = 2;
    wificonfiguration.preSharedKey = "\"" + HOTSPOT_PASSWORD + "\"";

    int networkId_ = wifi.addNetwork(wificonfiguration);

    if(networkId>-1){

           boolean status = wifi.enableNetwork(networkId_, true);

    }

对于棉花糖:您的应用程序现在只能更改WifiConfiguration对象的状态,前提是您创建了这些对象。您不能修改或删除用户或其他应用程序创建的WifiConfiguration对象。More info on Marshmallow

票数 3
EN

Stack Overflow用户

发布于 2016-08-24 20:56:25

自从安卓棒棒糖和棉花糖以来,你连接WiFi网络的方式发生了一些变化。有一篇很好的博客文章介绍了如何在棉花糖及更低版本上连接到WiFi网络

http://www.intentfilter.com/2016/08/programatically-connecting-to-wifi.html

这篇文章描述了一种场景,当WiFi网络没有连接,而您想要通过该网络发送流量时(类似于强制门户)。但它也解释了完整的过程,并适用于正常的网络。你不会找到确切的代码,但它仍然可以帮助你知道你卡在哪里了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35539273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档