我需要让我的应用自动连接到具有密码的特定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);
}
答案 0 :(得分:5)
在 wifiManager 对象上调用enableNetwork()
函数,而不是WifiManager
类。
注意: w 字母应为小写。
对addNetwork()
执行相同操作。
在您的清单中添加以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
对于WPA,请更新您的配置:
config.status = WifiConfiguration.Status.ENABLED;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
在wifiManager.setWifiEnabled(true)
行下方添加以下行:
wifiManager.startScan();
如果您需要其他帮助,请阅读this question和this 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