我研究了不同的帖子或网站来帮助我制作一个可以连接到开放 wifi 网络的应用程序(名称:OpenWrt)。除非我之前手动连接,否则我无法连接该应用程序。有人可以调查一下并帮助我吗? :) 我也许应该将网络添加到手机上的网络列表中,但如果这是问题所在,我不知道该怎么做。
谢谢!
package com.example.wificonnect;
import java.util.List;
import android.app.Activity;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.content.Context;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Définition du réseau wifi auquel on se connecte
String networkSSID = "\"OpenWrt\"";
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// Configuration des paramètres de connexion
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = networkSSID;
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
// Activation du wifi si pas encore activé
if(wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
}
else {
wifiManager.setWifiEnabled(true);
}
int netId = wifiManager.addNetwork(conf);
wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
}
}
我还添加了权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
编辑: 我应该在 wifi 激活后添加这样的东西吗?
int networkId = -1;
if(wifiManager.getConfiguredNetworks() != null) {
for (WifiConfiguration configuredNetwork : wifiManager.getConfiguredNetworks()) {
if (conf.SSID.equals(configuredNetwork.SSID)) {
networkId = configuredNetwork.networkId;
Log.i(LOG_TAG, "Network already registered : " + networkId);
}
}
}
if (networkId == -1) {
networkId = wifiManager.addNetwork(conf);
Log.i(LOG_TAG, "Network registered : " + networkId);
} else {
wifiManager.updateNetwork(conf);
}
wifiManager.enableNetwork(networkId, true);
最佳答案
首先获取开放网络的 ScanResult 对象。
Then you can use this method. That I have created for you.
public void connect(Context context, ScanResult scanResult){
WifiManagersingletonWifiManager = (WifiManager)context
.getApplicationContext()
.getSystemService(Context.WIFI_SERVICE);
configuration = new WifiConfiguration();
configuration.SSID = scanResult.SSID;
configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
int networkId = singletonWifiManager.addNetwork(configuration);
if(!singletonWifiManager.isWifiEnabled())
singletonWifiManager.setWifiEnabled(true);
singletonWifiManager.disconnect();
singletonWifiManager.enableNetwork(networkId,true);
singletonWifiManager.reconnect();
}
另外不要忘记在 Manifest 文件中声明权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
有用的资源:
你可以查看我的Repository on Github更多相关代码。
关于java - 使用 Android (Java) 连接到开放网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192499/