Java Android WifiInfo.getIpAddress在Nexus 5X和Android 6上返回0个Android
以下是我正在做的: 我注册了一个广播接收器,如下所示:Java Android WifiInfo.getIpAddress在Nexus 5X和Android 6上返回0个Android,java,android,networking,ip,wifi,Java,Android,Networking,Ip,Wifi,以下是我正在做的: 我注册了一个广播接收器,如下所示: mConnectionChangeReceiver = new ConnectionChangeReceiver(); IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); filter.addAction(W
mConnectionChangeReceiver = new ConnectionChangeReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mContext.registerReceiver(mConnectionChangeReceiver, filter, null, handler);
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
mWifiManager.enableNetwork(mCurrentNetworkId, true);
然后我会自动尝试连接到特定的WiFi。大概是这样的:
mConnectionChangeReceiver = new ConnectionChangeReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mContext.registerReceiver(mConnectionChangeReceiver, filter, null, handler);
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
mWifiManager.enableNetwork(mCurrentNetworkId, true);
我获得了预期的广播接收器事件。在onReceive()
内部,我检查SSID和SuplicantState
。问题是当我尝试获取电话ip地址时WifiInfo.getIpAddress
如果手机上的蜂窝网络已启用,则返回0;如果手机上的蜂窝网络已禁用,则返回0
请注意,如果设备在这两种情况下(有/没有蜂窝网络)都已连接到SSID,则这将起作用。为此,必须先关闭wifi,或者在运行代码之前将手机连接到另一个wifi
代码如下:
public void onReceive(Context context, Intent intent) {
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
//..... Here's the code that compares SSID
if (isConnectedToSSID() && (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
mIpAddress = NetworkHelper.getIpAddress(wifiInfo);
}
}
public static String getIpAddress(WifiInfo pWifiInfo) {
int ipAddress = pWifiInfo.getIpAddress();
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
ipAddress = Integer.reverseBytes(ipAddress);
}
byte[] ipByteArray = BigInteger.valueOf(ipAddress).toByteArray();
String ipAddressString = null;
try {
ipAddressString = InetAddress.getByAddress(ipByteArray).getHostAddress();
} catch (UnknownHostException ex) {
ex.printStackTrace();
}
return ipAddressString;
}
你知道为什么会这样吗