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

如何为热点中的Socket Server设置静态IP?

手机热点静态IP设置方案

核心结论

可以为手机热点设置静态IP,但受Android版本、厂商定制影响,方法分为系统设置和代码实现两种,也有替代方案绕过IP依赖。


1. 系统设置直接配置(优先尝试)

大部分安卓手机支持在热点设置中手动指定静态IP,路径参考:

  • 打开「设置」→「网络和互联网」→「热点和共享」→「移动热点」
  • 点击「配置热点」(或右上角三点选「高级设置」)
  • 在高级选项中找到「IP地址」「子网掩码」,手动输入你需要固定的IP(比如你提到的192.168.43.173)和子网掩码255.255.255.0
  • 保存后重启热点,IP就会固定为你设置的值

注意:部分厂商可能隐藏该选项,需先开启「开发者模式」(连续点击版本号)后再尝试查找。

2. 代码层面修改(需权限)

如果系统设置无此选项,或需要通过APP自动配置,可通过代码修改热点配置,但需对应权限:

所需权限

在AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

Android 10+还需引导用户手动授权「修改系统设置」权限。

代码实现

private boolean setHotspotStaticIp(Context context, String staticIp) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiConfiguration apConfig = wifiManager.getWifiApConfiguration();
    if (apConfig == null) {
        return false;
    }

    try {
        // 设置静态IP和子网前缀(24对应255.255.255.0)
        InetAddress ipAddress = InetAddress.getByName(staticIp);
        apConfig.linkAddress = new LinkAddress(ipAddress, 24);
        // 保存配置
        return wifiManager.setWifiApConfiguration(apConfig);
    } catch (UnknownHostException e) {
        e.printStackTrace();
        return false;
    }
}

注意:部分厂商会限制此API调用,无ROOT权限可能无法生效。

3. 替代方案(无法固定IP时)

如果以上方法都不适用,可通过以下方式绕过IP依赖:

  • mDNS主机名连接:在手机端用mDNS(如JmDNS库)广播服务,客户端通过设备名.local(比如MyPhone.local)连接,无需关注IP变化
  • 动态IP同步:热点开启后,将当前IP通过短信、本地广播或预设的轻量服务发送给客户端,客户端自动更新连接地址

你提供的IP获取代码说明

你当前的代码可以遍历所有本地网络接口的IP地址,当热点IP固定后,该方法依然能获取到你设置的静态IP:

private String getIpAddress() {
    String ip = "";
    try {
        Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface.getNetworkInterfaces();
        while (enumNetworkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = enumNetworkInterfaces.nextElement();
            Enumeration<InetAddress> enumInetAddress = networkInterface.getInetAddresses();
            while (enumInetAddress.hasMoreElements()) {
                InetAddress inetAddress = enumInetAddress.nextElement();
                if (inetAddress.isSiteLocalAddress()) {
                    ip += "SiteLocalAddress: "+ inetAddress.getHostAddress() + "\n";
                }
            }
        }
    } catch (SocketException e) {
        e.printStackTrace();
        ip += "Something Wrong! " + e.toString() + "\n";
    }
    return ip;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:33:34