タイトルが言うように...私はホットスポットとして設定されている場合、WiFi ifaceのIPを取得できるようにしようとしています。理想的には、すべての電話機で機能するものを探したいと思っています。AndroidでWi-FiホットスポットのIPを取得するにはどうすればよいですか?
もちろん、WifiManagerはAPから情報を取得する場合には役に立たない。
幸いにも、私はこれを行うことによって、すべてのインターフェイスのIPアドレスを取得することができました:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
Log.d("IPs", inetAddress.getHostAddress());
}
}
}
} catch (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}
このコードの塊は、すべてのインターフェイス(WiFiホットスポットを含む)のすべてのIPを印刷します。主な問題は、WiFiインタフェースを識別する方法が見つからないことです。いくつかの電話機には複数のインタフェース(WiMaxなど)があるため、これは問題です。
- フィルタリングを無線LANのiface表示名によって:これは私がこれまで試したものです、それは良い方法ではありませんので、別のデバイスからの表示名の変更(wlan0、eth0を、wl0.1、など) 。
- MACアドレスによるフィルタリング:ほとんどの場合動作しますが、一部のデバイスではホットスポットifaceにはMACアドレスがありません(iface.getHardwareAddress()がnullを返す)...有効な解決策ではありません。
申し訳ありませんが、解決策ではありません。私が前に言ったように、ifaceがAPモードにあるとき、WifiManagerは役に立たない。 AndroidはWi-Fiが無効になっていると「考える」。 一方、提供するソリューションに似たものを試しましたが、IPの代わりにMACアドレスを使用しました。しかし私がすでに指摘したように、それはうまくいかない。何らかの理由で、Wi-Fi ifaceのMACアドレスがヌルです(一部のデバイスでは)。 – sirlion
@sirlionはマニフェストのACCESS_WIFI_STATEですか? – tenorsax
うん、そうです。私を信じて、そのアプローチはうまくいかない。/ – sirlion