要连接到Wifi网络,可以使用Android的WifiManager和WifiConfiguration类。以下是一个示例代码,用于连接到指定的Wifi网络:
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSpecifier;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
public class WifiConnector {
private Context context;
private WifiManager wifiManager;
public WifiConnector(Context context) {
this.context = context;
wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
public void connectToWifi(String ssid, String password) {
WifiConfiguration wifiConfig = new WifiConfiguration();
// For WPA/WPA2 network
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", password);
int networkId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(networkId, true);
wifiManager.reconnect();
showToast("Connecting to Wifi: " + ssid);
}
private void showToast(final String message) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
});
}
}
要连接到Wifi网络,可以调用connectToWifi方法,并传入要连接的Wifi的SSID和密码。
请注意,在Android 10及更高版本中,使用WifiManager添加网络的方式已被弃用。相反,可以使用WifiNetworkSpecifier类来连接到特定的Wifi网络。以下是一个示例代码,用于在Android 10及更高版本上连接到Wifi网络:
import android.content.Context;
import android.net.wifi.WifiNetworkSpecifier;
import android.net.wifi.WifiTransportLayerSecurityException;
import android.net.wifi.WifiTransportLayerSecurityException.AuthenticationProblem;
import android.net.wifi.WifiTransportLayerSecurityException.CertificateProblem;
import android.net.wifi.WifiTransportLayerSecurityException.SessionTimeout;
import android.net.wifi.WifiTransportLayerSecurityException.UntrustedRoot;
import androidx.annotation.NonNull;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class WifiConnector {
private Context context;
private WifiManager wifiManager;
public WifiConnector(Context context) {
this.context = context;
wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
public void connectToWifi(String ssid, String password) {
WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
builder.setSsid(ssid);
builder.setWpa2Passphrase(password);
WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
Executor executor = Executors.newSingleThreadExecutor();
wifiManager.requestNetwork(wifiNetworkSpecifier, new ConnectToWifiCallback(), executor);
}
private class ConnectToWifiCallback extends WifiManager.NetworkCallback {
@Override
public void onUnavailable() {
showToast("Failed to connect to Wifi");
}
@Override
public void onAvailable(@NonNull android.net.Network network) {
wifiManager.enableNetwork(network);
wifiManager.connect(network);
showToast("Connecting to Wifi");
}
@Override
public void onBlockedStatusChanged(boolean blocked) {
if (blocked) {
showToast("Wifi network is blocked");
} else {
showToast("Wifi network is unblocked");
}
}
@Override
public void onAuthenticationProblem(@AuthenticationProblem int problem) {
showToast("Wifi authentication problem: " + problem);
}
@Override
public void onCertificateProblem(@CertificateProblem int problem) {
showToast("Wifi certificate problem: " + problem);
}
@Override
public void onSessionTimeout() {
showToast("Wifi session timeout");
}
@Override
public void onUntrustedRoot(@UntrustedRoot int reason) {
showToast("Wifi untrusted root: " + reason);
}
}
private void showToast(final String message) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
});
}
}
在这个示例代码中,我们使用了WifiNetworkSpecifier.Builder来创建一个WifiNetworkSpecifier对象,并通过WifiManager的requestNetwork方法来连接到指定的Wifi网络。这个示例代码还包括一些回调方法,用于处理连接过程中可能出现的问题。