I tried to use the code to connect to WiFi on Android 13. The callback function in the code will execute if the connection is successful, but in fact the phone is not connected to WiFi at all. This code will work on Android12, but not on Android 13.
package common.yunshen.common.wifimanager;
import android.net.MacAddress;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSuggestion;
import android.os.Build;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.List;
public class WifiConnect {
public interface WifiConnectCallback {
void onConnectSuccess();
void onConnectFailure(String errorMessage);
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public static void connectWifiForQ(WifiManager manager, String ssid, String bssid, String passwd, boolean isHidden, String capabilities, WifiConnectCallback callback) {
if (capabilities.contains("WPA-PSK") || capabilities.contains("WPA2-PSK")) {
setWPA2ForQ(manager, ssid, bssid, passwd, isHidden, callback);
} else {
setESSForQ(manager, ssid, isHidden, callback);
}
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public static void setWPA2ForQ(WifiManager manager, String ssid, String bssid, String passwd, boolean isHidden, WifiConnectCallback callback) {
WifiNetworkSuggestion suggestion;
if (bssid == null) {
suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setWpa2Passphrase(passwd)
.setIsHiddenSsid(isHidden)
.build();
} else {
suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setBssid(MacAddress.fromString(bssid))
.setWpa2Passphrase(passwd)
.setIsHiddenSsid(isHidden)
.build();
}
List<WifiNetworkSuggestion> suggestions = new ArrayList<>();
suggestions.add(suggestion);
int status = manager.addNetworkSuggestions(suggestions);
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
// 连接失败
callback.onConnectFailure("Failed to add network suggestion");
} else {
callback.onConnectSuccess();
}
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public static void setESSForQ(WifiManager manager, String ssid, boolean isHidden, WifiConnectCallback callback) {
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setIsHiddenSsid(isHidden)
.build();
List<WifiNetworkSuggestion> suggestions = new ArrayList<>();
suggestions.add(suggestion);
int status = manager.addNetworkSuggestions(suggestions);
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
// 连接失败
callback.onConnectFailure("Failed to add network suggestion");
} else {
callback.onConnectSuccess();
}
}
}
I looked up the relevant information and found that I need to add a new permission.
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"/>
But it doesn't work.
I wonder what went wrong,thank you.