9

このメソッドは非推奨であり、代わりに getHostAddress() が使用されるはずです。

私の質問は、getHostAddress がどのように置き換えられるかです。私はそれを同じことに近づけることができないようです。

私がやろうとしているのは、サブネット マスクの整数表現を取得し、それを文字列に変換することです。

formatIPAddress はこれを完全に行います。

例として、私のサブネット マスクは「255.255.255.192」です。WifiManager が返す整数値は 105696409 です。formatIPAddress はこれを正しく返します。

getHostAddress を機能させることさえできないようです。ましてや、整数値をサブネット マスク文字列に変換することはできません。

動作するコード例

WifiManager wm = (WifiManager) MasterController.maincontext.getSystemService(Context.WIFI_SERVICE);

DhcpInfo wi = wm.getDhcpInfo();


int ip = wm.getDhcpInfo().ipAddress;
int gateway = wm.getDhcpInfo().gateway;
int mask = wm.getDhcpInfo().netmask;

String maskk = Formatter.formatIpAddress(mask);

誰でもこれを経験したことがありますか?フォーマッタ クラスからソース コードを取得して、そのまま使用できます。しかし、私は新しい方法を使いたいだけです。

4

2 に答える 2

4

int を byte[] に変換し、その配列を使用して InetAddress をインスタンス化する必要があります。

...
int ipAddressInt = wm.getDhcpInfo().netmask;
byte[] ipAddress = BigInteger.valueOf(ipAddressInt).toByteArray();
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String hostaddr = myaddr.getHostAddress(); // numeric representation (such as "127.0.0.1")

これで、フォーマッタがリトル エンディアンを想定し、bigInteger.toByteArray() がビッグ エンディアン表現を返すことがわかりました。そのため、byte[] を逆にする必要があります。

于 2013-06-12T01:32:53.703 に答える