2016-10-15 10 views
3

Androidデバイスが接続されているネットワークに関する情報を見つける必要があります。基本的に、AndroidデバイスはAndroid TVで、WiFiとEthernet接続を備えています。それは常に(ゼロ)を示しているとして、それは私が使用しているコードを次に示し255.255.255.0Androidデバイスでネットマスクを検索

を示すべきであるのに対し、
私は、無線LANでの作業とnetMask以外のすべての正しい情報を取得しています:

wifiMgr= (WifiManager) getSystemService(Context.WIFI_SERVICE); 
dhcpInfo=wifiMgr.getDhcpInfo(); 

vDns1="DNS 1: "+intToIp(dhcpInfo.dns1); 
vDns2="DNS 2: "+intToIp(dhcpInfo.dns2); 
vGateway="Default Gateway: "+intToIp(dhcpInfo.gateway); 
vIpAddress="IP Address: "+intToIp(dhcpInfo.ipAddress); 
vLeaseDuration="Lease Time: "+String.valueOf(dhcpInfo.leaseDuration); 
vNetmask="Subnet Mask: "+intToIp(dhcpInfo.netmask); 
vServerAddress="Server IP: "+intToIp(dhcpInfo.serverAddress); 

intToIp(int)のための定義:

public String intToIp(int i) { 

    return ((i >> 24) & 0xFF) + "." + 
      ((i >> 16) & 0xFF) + "." + 
      ((i >> 8) & 0xFF) + "." + 
      (i & 0xFF) ; 
} 

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

どうして私はそれを修正できますか?

答えて

2

これはan android bugです。

は、バグレポートによると、あなたは(報告書からコピーされた)次の回避策を使用することができ、次のいずれか

WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); 
try { 
    InetAddress inetAddress = InetAddress.getByAddress(extractBytes(dhcpInfo.ipAddress)); 
    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress); 
    for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) { 
     //short netPrefix = address.getNetworkPrefixLength(); 
     Log.d(TAG, address.toString()); 
    } 
} catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
} 

を...か、完全にこのAPIの使用を停止し、代わりにLinkProperties APIを使用します。

+0

コードを試したときに例外が発生するIOException:java.net.UnknownHostException:アドレスが4または16バイトでない:[-64]、なぜ-64ですか? – iSandeep

+0

LinkProperties.getRoutes()は、[fe80 ::/64 - > :: wlan0,192.168.43.0/24 - > 0.0.0.0 wlan0,0.0.0.0/0 - > 192.168.43.1 wlan0、]を返します。 – iSandeep

+0

これはインターフェイスの[ルーティングテーブル](https://en.wikipedia.org/wiki/Routing_table)です。それはインターフェイスが直接 '192.168.43.0/24'ネットワークに接続されていることを示しています。つまり、ネットワークアドレスが' 255.255.255.0'(24 x '1ビット)のネットマスクを持つ' 192.168.43.0'です。そして、ネットワークを出るゲートウェイ(ネットワークをインターネットの他の部分に接続するルータ)は192.168.43.1 – Malt

関連する問題