Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android WifiInfo.getIpAddress在Nexus 5X和Android 6上返回0个Android_Java_Android_Networking_Ip_Wifi - Fatal编程技术网

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;
}
你知道为什么会这样吗