You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ConnectivityManager配置自定义SSID和密码开启Wi-Fi热点?

我之前踩过这个坑!你说的没错,WifiManager#setWifiApEnabled早就彻底没用了——看源码就知道它现在只是输出警告日志,完全不会触发热点启动,而且那几个注解@SystemApi、@Deprecated、@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)也摆明了:普通APP根本没权限用这个系统级接口。

下面是我实测有效的、适配高版本Android的解决方案:

正确实现自定义SSID/密码的Wi-Fi热点

1. 配置必要权限

首先在AndroidManifest.xml里声明基础权限:

<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- Android 12+ 额外需要这个权限用于热点配置 -->
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:minSdkVersion="31" />

注意:TETHER_PRIVILEGED是系统级权限,普通APP无法直接声明,需要通过系统授权流程获取(后面会提到)。

2. 设置热点的SSID和密码参数

用WifiConfiguration定义热点的配置信息,然后通过WifiManager应用这个配置:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration apConfig = new WifiConfiguration();

// 自定义SSID(热点名称)
apConfig.SSID = "MyCustomHotspot_001";
// 自定义密码(必须至少8位)
apConfig.preSharedKey = "MySecurePass123!";
// 设置加密方式为WPA2-PSK(最常用的安全模式)
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);
apConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);

// 应用配置(Android Q及以上可用)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    boolean configSetSuccess = wifiManager.setSoftApConfiguration(apConfig);
    if (!configSetSuccess) {
        Log.e("Hotspot", "热点配置设置失败");
        return;
    }
}

3. 启动热点(Android 10+ 官方API)

使用ConnectivityManager的startTethering方法启动热点,这个方法会自动触发系统权限授权弹窗(如果用户还没授权):

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    connectivityManager.startTethering(
        ConnectivityManager.TETHERING_WIFI, // 指定启动Wi-Fi热点
        true, // 是否显示系统授权弹窗
        new ConnectivityManager.OnStartTetheringCallback() {
            @Override
            public void onTetheringStarted() {
                // 热点启动成功的回调
                Log.d("Hotspot", "自定义热点已成功启动!");
                // 这里可以更新UI提示用户
            }

            @Override
            public void onTetheringFailed(int errorCode) {
                // 启动失败的回调,根据错误码处理
                Log.e("Hotspot", "热点启动失败,错误码:" + errorCode);
                if (errorCode == ConnectivityManager.TETHER_ERROR_NO_PERMISSION) {
                    // 权限不足,引导用户到热点设置页面手动授权
                    Intent settingsIntent = new Intent(Settings.ACTION_TETHER_SETTINGS);
                    startActivity(settingsIntent);
                }
            }
        }
    );
}

4. 停止热点(可选)

如果需要关闭热点,同样用ConnectivityManager:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    connectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
}

额外注意事项

  • Android 9及以下:旧的反射方法setWifiApEnabled可能还能工作,但官方已经废弃,不推荐使用,建议只在兼容旧版本时作为 fallback。
  • 热点启动时,系统会自动关闭当前的Wi-Fi连接,不需要手动处理。
  • 部分厂商可能对热点功能有定制限制,如果遇到异常,建议测试原生Android系统确认问题。

内容的提问来源于stack exchange,提问作者pebble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:23:09