<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              如何在代碼中設置WIFI靜態IP?Android設置WIFI靜態IP

              來源:CSDN 時間:2023-04-19 08:51:02


              (相關資料圖)

              想要在代碼中實現設置WIFI靜態IP需要有系統權限,要在manifest文件添加android:sharedUserId=“android.uid.system”,還要有系統簽名。 設置WIFI靜態IP和之前以太網的類似,都是要構造StaticIpConfiguration對象,以及IpConfiguration.IpAssignment.STATIC就代表設置為靜態IP,也可以設置DHCP(自動獲?。贿^WifiConfiguration可以直接通過WifiManager獲取到,比設置以太網的要簡單一些,不用反射來獲取對象。

              將IP,NETMASK,GATEWAY和DNS設置進去,構造StaticIpConfiguration對象,下邊是代碼:

              try {Inet4Address inetAddr = getIPv4Address(STATIC_IP);    int prefixLength = NetUtils.maskStr2InetMask(STATIC_NETMASK);    InetAddress gatewayAddr = getIPv4Address(STATIC_GATEWAY);    InetAddress dnsAddr = getIPv4Address(STATIC_DNS1);    Class[] cl = new Class[]{InetAddress.class, int.class};    Constructor cons = null;    Class clazz = Class.forName("android.net.LinkAddress");    //取得所有構造函數    try {cons = clazz.getConstructor(cl);    } catch (NoSuchMethodException e) {e.printStackTrace();    }    if (cons == null) {return;    }    //給傳入參數賦初值    Object[] x = {inetAddr, prefixLength};    //構造StaticIpConfiguration對象    Class staticIpConfigurationCls = Class.forName("android.net.StaticIpConfiguration");    //實例化StaticIpConfiguration    Object staticIpConfiguration = null;    staticIpConfiguration = staticIpConfigurationCls.newInstance();    Field ipAddress = staticIpConfigurationCls.getField("ipAddress");    Field gateway = staticIpConfigurationCls.getField("gateway");    Field dnsServers = staticIpConfigurationCls.getField("dnsServers");    //設置ipAddress    ipAddress.set(staticIpConfiguration, (LinkAddress) cons.newInstance(x));    //設置網關    gateway.set(staticIpConfiguration, gatewayAddr);    //設置dns    ArrayListdnsList = (ArrayList) dnsServers.get(staticIpConfiguration);    dnsList.add(dnsAddr);    if (!STATIC_DNS2.isEmpty()) {dnsList.add(getIPv4Address(STATIC_DNS2));    }    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);    WifiConfiguration wifiConfig = null;    WifiInfo connectionInfo = wifiManager.getConnectionInfo();  //得到連接的wifi網絡    @SuppressLint("MissingPermission")    ListconfiguredNetworks = wifiManager.getConfiguredNetworks();    for (WifiConfiguration conf : configuredNetworks) {if (conf.networkId == connectionInfo.getNetworkId()) {wifiConfig = conf;            break;        }    }    @SuppressLint("PrivateApi") Class ipAssignmentCls = Class.forName("android.net.IpConfiguration$IpAssignment");    Object ipAssignment = Enum.valueOf(ipAssignmentCls, "STATIC");    Method setIpAssignmentMethod = wifiConfig.getClass().getDeclaredMethod("setIpAssignment", ipAssignmentCls);    setIpAssignmentMethod.invoke(wifiConfig, ipAssignment);    Method setStaticIpConfigurationMethod = wifiConfig.getClass().getDeclaredMethod("setStaticIpConfiguration", staticIpConfiguration.getClass());    //設置靜態IP,將StaticIpConfiguration設置給WifiConfiguration    setStaticIpConfigurationMethod.invoke(wifiConfig, staticIpConfiguration);    //WifiConfiguration重新添加到WifiManager     int netId = wifiManager.addNetwork(wifiConfig);    wifiManager.disableNetwork(netId);    boolean flag = wifiManager.enableNetwork(netId, true);} catch (NoSuchFieldException | IllegalAccessException | InstantiationException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException e) {e.printStackTrace();}

              通過WifiConfiguration的setStaticIpConfiguration方法將StaticIpConfiguration對象設置進去,通過setIpAssignment,將IpAssignment設置進去,值設為STATIC,最后根據netId 重啟這個網絡,即可將靜態IP設置成功。

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩