android 获取局域网所有有线网络ip, 请提供完整代码
时间: 2023-12-08 14:06:20 浏览: 221
以下是一个完整的获取局域网所有有线网络IP的 Android 示例代码:
```java
import android.content.Context;
import android.net.DhcpInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView ipListTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ipListTextView = findViewById(R.id.ip_list_text_view);
// 启动异步任务,获取局域网中的所有有线网络IP地址
new GetIpListTask().execute();
}
// 异步任务,获取局域网中的所有有线网络IP地址
private class GetIpListTask extends AsyncTask<Void, Void, List<String>> {
@Override
protected List<String> doInBackground(Void... voids) {
List<String> ipList = new ArrayList<>();
try {
// 获取设备所在的IP地址和子网掩码
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
String ipAddress = intToIp(dhcpInfo.ipAddress);
String subnetMask = intToIp(dhcpInfo.netmask);
// 遍历子网中的所有IP地址,判断是否可达
String subnet = ipAddress.substring(0, ipAddress.lastIndexOf("."));
for (int i = 1; i < 255; i++) {
String testIp = subnet + "." + i;
InetAddress address = InetAddress.getByName(testIp);
if (address.isReachable(500)) {
ipList.add(testIp);
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return ipList;
}
@Override
protected void onPostExecute(List<String> ipList) {
// 更新UI,显示所有可达的有线网络IP地址
StringBuilder sb = new StringBuilder();
for (String ip : ipList) {
sb.append(ip).append("\n");
}
ipListTextView.setText(sb.toString());
}
}
// 将整数形式的IP地址转换为字符串形式
private String intToIp(int ip) {
return (ip & 0xFF) + "." +
((ip >> 8) & 0xFF) + "." +
((ip >> 16) & 0xFF) + "." +
((ip >> 24) & 0xFF);
}
}
```
在这个示例中,我们定义了一个 `GetIpListTask` 异步任务,通过调用 `doInBackground()` 方法获取局域网中的所有有线网络IP地址,并在 `onPostExecute()` 方法中更新UI,显示所有可达的有线网络IP地址。我们使用了 `WifiManager` 类和 `InetAddress` 类来实现获取IP地址和判断是否可达的逻辑。我们还定义了一个 `intToIp()` 方法,将整数形式的IP地址转换为字符串形式。最后,我们在 `onCreate()` 方法中启动异步任务,获取局域网中的所有有线网络IP地址,并将结果显示在 `TextView` 中。
阅读全文