我希望能够获取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。 谢谢!