为什么InetAddress.getLocalHost().getHostAddress()在android中返回127.0.0.1,但在JAVA程序中运行良好

为什么InetAddress.getLocalHost().getHostAddress()在android中返回127.0.0.1,但在JAVA程序中运行良好,java,android,Java,Android,我正在开发一个android应用程序,它可以返回连接到WI-FI网络的设备的IP地址。当我使用代码时 InetAddress.getLocalHost().getHostAddress(); 在JAVA程序中,它将我的IP返回为10.160.2.197(这正是我想要的)。但当我在Android应用程序中运行此代码时,它返回127.0.0.1设备已连接到WIFI。 Stackoverflow中的一些解决方案建议使用 WifiManager wm = (WifiManager) getSystem

我正在开发一个android应用程序,它可以返回连接到WI-FI网络的设备的IP地址。当我使用代码时

InetAddress.getLocalHost().getHostAddress();
在JAVA程序中,它将我的IP返回为
10.160.2.197
(这正是我想要的)。但当我在Android应用程序中运行此代码时,它返回
127.0.0.1
设备已连接到WIFI。
Stackoverflow中的一些解决方案建议使用

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
无法使用
InetAddress.getLocalHost().getHostAddress()获取IP地址吗
若否,原因为何

这是我的密码

公共类MainActivity扩展活动{
专用按钮b;
私有文本视图t;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b=(按钮)findViewById(R.id.Button);
t=(TextView)findViewById(R.id.ip);
b、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图arg0){
getIp obj=新的getIp();
obj.execute()
}
});   
}    
类getIp扩展了异步任务
{
字符串ip;
公共Void doInBackground(Void…params)
{
试一试{
ip=InetAddress.getLocalHost().getHostAddress();
}捕获(未知后异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
PostExecute上的公共作废(作废结果){
t、 setText(ip);
}
}
}
清单包含以下权限


如果您有权访问WIFI\u州
,这应该适用于您

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ipAddress = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

如果您有访问WIFI状态的权限,这应该适用于您

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ipAddress = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

这是Android上的预期行为。请参阅javadoc以了解:

请注意,如果主机没有设置主机名,请将其设置为Android设备 通常不会–此方法将有效地返回环回 地址,尽管是通过获取名称localhost,然后进行查找 将其转换为127.0.0.1


这是Android上的预期行为。请参阅javadoc以了解:

请注意,如果主机没有设置主机名,请将其设置为Android设备 通常不会–此方法将有效地返回环回 地址,尽管是通过获取名称localhost,然后进行查找 将其转换为127.0.0.1


但是为什么InetAddress.getLocalHost().getHostAddress()会出现错误;返回127.0.0.1?因为本地和外部IP地址之间存在差异。那么,当我在eclipse中以JAVA程序运行设备时,为什么它会给我的设备IP?Android应用程序可能没有设置主机名,这是正常行为。非常感谢你。最终得到了一个合适的解释,但是为什么InetAddress.getLocalHost().getHostAddress();返回127.0.0.1?因为本地和外部IP地址之间存在差异。那么,当我在eclipse中以JAVA程序运行设备时,为什么它会给我的设备IP?Android应用程序可能没有设置主机名,这是正常行为。非常感谢你。终于得到了恰当的解释
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ipAddress = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());