私は現在使用しています
public static String getLocalIPAddress(WifiManager wm){
return Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
}
実行中のデバイスのIPアドレスを取得します。デバイスが他のAndroidデバイスがホットスポットを介してホストされているWi-Fiネットワークに接続されているだけでなく、デバイスが「共通の」WLANネットワークに接続されている場合、これは正常に機能します。 Wi-Fiネットワークに接続されていません "0.0.0.0"が返されます(正しい)しかし、デバイスがホットスポットを提供してWi-Fiネットワークをホストしている場合、methodeはまだ "0.0.0.0"を返します。 「独自のWi-Fiネットワーク内の」デバイスを提供するホットスポットのアドレス
tHX&敬具
あなたはほぼ正しい、ホットスポットのデフォルトのIPアドレスは192.168.43.1
(デバイスメーカーが変更されなかった場合。)
Android framework(AOSP)のソースコードを確認できます。
/frameworks/base/services/Java/com/Android/server/connectivity/Tethering.Java
/frameworks/base/wifi/Java/Android/net/wifi/WifiStateMachine.Java
Tethering.Javaで、
private static final String USB_NEAR_IFACE_ADDR = "192.168.42.129";
private static final int USB_PREFIX_LENGTH = 24;
// USB is 192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
// with 255.255.255.0
private String[] mDhcpRange;
private static final String[] DHCP_DEFAULT_RANGE = {
"192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
"192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
"192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
"192.168.48.2", "192.168.48.254",
};
また、WifiStateMachine.Java
private boolean startTethering(ArrayList<String> available) {
boolean wifiAvailable = false;
checkAndSetConnectivityInstance();
String[] wifiRegexs = mCm.getTetherableWifiRegexs();
for (String intf : available) {
for (String regex : wifiRegexs) {
if (intf.matches(regex)) {
InterfaceConfiguration ifcg = null;
try {
ifcg = mNwService.getInterfaceConfig(intf);
if (ifcg != null) {
/* IP/netmask: 192.168.43.1/255.255.255.0 */
ifcg.setLinkAddress(new LinkAddress(
NetworkUtils.numericToInetAddress("192.168.43.1"), 24));
ifcg.setInterfaceUp();
mNwService.setInterfaceConfig(intf, ifcg);
}
} catch (Exception e) {
loge("Error configuring interface " + intf + ", :" + e);
return false;
}
if(mCm.tether(intf) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
loge("Error tethering on " + intf);
return false;
}
mTetherInterfaceName = intf;
return true;
}
}
}
// We found no interfaces to tether
return false;
}
したがって、デフォルト値は192.168.43.1
。
少数の異なるデバイスをテストしましたが、デバイスを提供するホットスポットには常にIP 192.168.43.1
そのネットワーク上。誰かがこの仮定を確認/確認できますか?
ホットスポットはおそらくDHCPサーバーとして機能します。そう、
Wi-Fiホットスポットに接続した後にIPアドレス(サーバー)を取得するには、リモート(クライアント)からメソッドを呼び出します
intToInetAddress(wifiManager.getDhcpInfo().serverAddress);// get hotspot ip
それから
public InetAddress intToInetAddress(int hostAddress)
{
byte[] addressBytes = {(byte) (0xff & hostAddress),
(byte) (0xff & (hostAddress >> 8)),
(byte) (0xff & (hostAddress >> 16)),
(byte) (0xff & (hostAddress >> 24))};
try
{
return InetAddress.getByAddress(addressBytes);
}
catch (UnknownHostException e)
{
throw new AssertionError();
}
}
接続されたホットスポットのIPアドレスを返します。はい、ホットスポットのほとんどのデフォルトIPアドレスは 192.168.43.1 です
これは古い質問ですが、これは誰かを助けるかもしれません。これにより、ホットスポットをオンにしている限り、デバイスの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) {
// TODO Auto-generated catch block
e.printStackTrace();
ip += "Something Wrong! " + e.toString() + "\n";
}
return ip;
}
また、いくつかのデバイスをチェックしました。すべてのデバイスは192.168.43.1という同じIPを持っていますが、このアドレスを試すことができますが、Android pieで192.168.43.68になります
termuxを開いて実行する
pkg install net-tools
ifconfig -a | grep 192.168.43.
あなたはこれを取得します:
inet 192.168.43.248 netmask 255.255.255.0 broadcast 192.168.43.255