代码是在android9.0源码里修改的,有些api是标记的@system api,应用层如果调用不到,可以尝试用反射调用。
WifiManager wifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
public void createWifiHotSpot(String ssid, String psw) {
if(TextUtils.isEmpty(ssid) || wifiManager == null) {
return;
}
WifiConfiguration wificonfig = generateWifiApConfig(ssid, psw);
boolean configAvailable = wifiManager.setWifiApConfiguration(wificonfig);
if(!wifiManager.isWifiApEnabled()) {
wifiManager.startSoftAp(wificonfig);
}
}
private WifiConfiguration generateWifiApConfig(String ssid, String password) {
WifiConfiguration config = new WifiConfiguration();
config.SSID = ssid;
if(TextUtils.isEmpty(password)) {
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else {
config.preSharedKey = password;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);
}
return config;
}
创建热点可以调用 startSoftAp(),还可以这样:
ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.startTethering(ConnectivityManager.TYPE_MOBILE, true, new ConnectivityManager.OnStartTetheringCallback() {
@Override
public void onTetheringFailed() {
}
@Override
public void onTetheringStarted() {
}
});
ConnectivityManager.TYPE_MOBILE 值为0,应用层引用不到可以传0。
WifiConfiguration.KeyMgmt.WPA2_PSK 值为4。
如果热点是开启的,创建热点会失败,导致热点关闭,可以先关闭热点,然后监听热点状态的广播进行重新创建。
//关闭热点
wifiManager.stopSoftAp();
//或者
connectivityManager.stopTethering(ConnectivityManager.TYPE_MOBILE);