我想解决下一个问题。我的设备处于AP模式(便携式WiFi热点)。 It has to show IP of it
。另一个设备使用已知IP连接到此设备。它必须在没有任何WiFi路由器的情况下工作,只需要设备到设备。
如果收音机已在AP模式下运行,如何获取IP地址?我有一些关于AP的代码:
public boolean setWifiApEnabled(WifiConfiguration config, boolean enabled) {
try {
if (enabled) { // disable WiFi in any case
mWifiManager.setWifiEnabled(false);
}
Method method = mWifiManager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class,
boolean.class);
return (Boolean) method.invoke(mWifiManager, config, enabled);
} catch (Exception e) {
//Log.e(TAG, "", e);
return false;
}
}
public int getWifiApState() {
try {
Method method = mWifiManager.getClass().getMethod(
"getWifiApState");
return (Integer) method.invoke(mWifiManager);
} catch (Exception e) {
//Log.e(TAG, "", e);
return WIFI_AP_STATE_FAILED;
}
}
public static boolean IsWifiApEnabled(Context context){
boolean isWifiAPEnabled = false;
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for(Method method: wmMethods){
if(method.getName().equals("isWifiApEnabled")) {
try {
isWifiAPEnabled = (Boolean) method.invoke(wifi);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return isWifiAPEnabled;
}
}
也许有一些技巧可以获得它的IP?请帮我。感谢。
答案 0 :(得分:1)
我用它来确定IP地址:
private String determineHostAddress() {
try {
for (Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces(); nis.hasMoreElements(); ) {
NetworkInterface ni = nis.nextElement();
if (!ni.isLoopback() && !ni.isVirtual() && ni.isUp() && !ni.isPointToPoint() && ni.getHardwareAddress() != null) {
for (Enumeration<InetAddress> ips = ni.getInetAddresses(); ips.hasMoreElements(); ) {
InetAddress ip = ips.nextElement();
if (ip.getAddress().length == 4) {
return ip.getHostAddress();
}
}
}
}
} catch (Exception ignored) {}
return null;
}
答案 1 :(得分:-1)
这可能不适用于您的情况但在我的应用程序中我计划显示热点的IP地址,以便我可以在另一个连接到热点的Android设备上输入它以连接到热点上运行的Web服务器。在那种情况下,客户端(连接到热点的设备)可以简单地查询连接到热点后连接到的网关的IP地址。这将始终是热点的IP地址。这是我的代码:
@SuppressWarnings("deprecation") // Deprecated because it doesn't handle IPv6 but wifimanager only supports IPV4 anyway
private String getGateway()
{
final WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
return Formatter.formatIpAddress(dhcpInfo.gateway);
}
顺便说一下,到目前为止我测试的每个Android上的热点的IP地址总是192.168.43.1。根据{{3}},它在Android源代码中是硬编码的。