自动和以编程方式连接到特定的WiFi接入点

时间:2014-07-23 10:42:24

标签: android android-wifi wifimanager

我需要让我的应用自动连接到具有密码的特定SSID。 我正在尝试这个,但这就是我得到的:

错误:

  

非静态方法addNetwork(WifiConfiguration)无法引用   来自静态背景

错误:

  

非静态方法enableNetwork(int,boolean)无法引用   静态上下文

final WifiManager wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE);
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"xxx\"";
config.preSharedKey = "\"123\"";
if (!wifiManager.isWifiEnabled()){
    wifiManager.setWifiEnabled(true);
    int networkId = WifiManager.addNetwork(config);
    WifiManager.enableNetwork(networkId, true);
}

2 个答案:

答案 0 :(得分:5)

wifiManager 对象上调用enableNetwork()函数,而不是WifiManager类。

注意: w 字母应为小写

addNetwork()执行相同操作。

编辑:

在您的清单中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

编辑2:

对于WPA,请更新您的配置:

config.status = WifiConfiguration.Status.ENABLED;

config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

EDIT3:

wifiManager.setWifiEnabled(true)行下方添加以下行:

wifiManager.startScan();

编辑4:

如果您需要其他帮助,请阅读this questionthis article。 祝你好运。

答案 1 :(得分:1)

事实上,您正在尝试从非静态源获取静态方法/变量或资源,这就是此错误的原因。

从正在访问此内容的方法/类中删除静态声明:

public wifiAccess(){
final WifiManager wifiManager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE);
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"xxx\"";
config.preSharedKey = "\"123\"";
if (!wifiManager.isWifiEnabled()){
    wifiManager.setWifiEnabled(true);
    int networkId = WifiManager.addNetwork(config);
    WifiManager.enableNetwork(networkId, true);
}
 }

进一步参考: "Non-static method cannot be referenced from a static context" error