我正在使用将在Android TV Box上运行的Android应用程序,我的设备可以通过Wifi
或Ethernet
电缆连接到网络。我需要获取设备IPv4
的地址,现在可以通过Wifi
连接设备时获取地址,但是通过Ethernet
电缆连接时无法获取地址。< / p>
我的最低SDK版本是24,目前,当我控制应用程序将运行的设备时,我的目标Android版本是7.1和8.0。
当设备IPv4
连接到Wifi
时,我使用下面的代码来获取设备Ethernet
的地址,但是我找不到WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = manager.getConnectionInfo();
int ipInt = wifiInfo.getIpAddress();
String ip = InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress();
电缆的类似代码
Wifi
我需要一种方法来检测我的设备是否通过Ethernet
或IPv4
连接并正确获取@Entity
。
答案 0 :(得分:1)
public static String getIpAddress() {
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() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
ex.printStackTrace();
}
return null;
}
编辑: 在清单中添加Internet权限以使其正常工作:
<uses-permission android:name="android.permission.INTERNET" />
这在所有情况下都应该有帮助。
答案 1 :(得分:0)
您应该尝试如下所示的方法。
检查设备是否已连接到Wi-Fi。如果是,则您所做的工作正常,但如果不能,请尝试以下代码中的 else 部分。
步骤-1:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
步骤-2:
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
String ip = null;
if (mWifi.isConnected()) {
WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = manager.getConnectionInfo();
int ipInt = wifiInfo.getIpAddress();
ip = InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress();
}
else{
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()) {
ip = inetAddress.getHostAddress();
Log.i(TAG, "***** IP="+ ip);
}
}
}
} catch (SocketException ex) {
Log.e(TAG, ex.toString());
}
}
return ip;