我想获取Android设备通过WiFi连接的WiFi热点(从另一台计算机)的IP地址,不是Android的本地IP地址。我在真实设备中运行应用程序。 我可以扫描所有 WiFi 并获取它们的名称。
public class WifiConnectorActivity extends Activity {
TextView mainText;
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
mainText = (TextView) findViewById(R.id.text);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
receiverWifi = new WifiReceiver();
if(!mainWifi.isWifiEnabled()){
mainWifi.setWifiEnabled(true);
}
registerReceiver(receiverWifi, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
mainText.setText("\nStarting Scan...\n");
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
StringBuilder sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
for(int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ".");
sb.append((wifiList.get(i)).toString());
sb.append("\n");
}
mainText.setText(sb);
}
}
}
当然,我可以使用此代码获取本地IP地址:
public static String getLocalIpAddressString() {
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()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception ex) {
Log.e("IPADDRESS", ex.toString());
}
return null;
}
例如,我可以看到Android设备的本地IP地址是192.168.2.101,但是如何在代码中获取WiFi热点的IP地址是192.168.2.1?
并非所有 WiFi 接入点都有 IP 地址!这不是一个要求。它运行在不同的层上。
话虽如此,您可以在 AP 的无线 MAC 上使用反向 ARP 来获取其 IP 地址(如果有的话)。另请注意,此 IP 有时与有线接口不同。
对于家庭一体式无线路由器,您还可以检查 DHCP 分配为网关地址的任何内容,但同样,这与接入点没有直接关联。
如果您使用默认子网,则主机 IP 地址
192.168.2.101
直接意味着接入点地址 192.168.2.1
。您的 IP 地址是组 C。因此,对于该组中的任何地址 x.x.x.y
,子网本身是 x.x.x.0
,并且第一个主机地址 x.x.x.1
分配给接入点。所有其他地址:x.x.x.2
到 x.x.x.254
分配给连接的主机,x.x.x.255
是本地广播地址。