Androidは携帯電話のIPアドレスを正確に取得する2つの方法を開発した。
最近、インターネットでIPアドレスを取得する例をたくさん見ましたが、多くは正確ではないです。ここでipアドレスを取得する二つの方法を書いてみます。
例えば、WeChatで支払っても、バックグラウンドはインターフェースをする時に、App側にIPアドレスが入るように要求します。私達はネットワーク環境か、WI-FIかそれとも3 Gかを判断する必要があります。この二つの環境のipアドレスを取得する必要があります。
第一歩:まずネットワーク環境を判断する:
例えば、WeChatで支払っても、バックグラウンドはインターフェースをする時に、App側にIPアドレスが入るように要求します。私達はネットワーク環境か、WI-FIかそれとも3 Gかを判断する必要があります。この二つの環境のipアドレスを取得する必要があります。
第一歩:まずネットワーク環境を判断する:
String ip;
ConnectivityManager conMann = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobileNetworkInfo.isConnected()) {
ip = getLocalIpAddress();
System.out.println(" ip-----"+ip);
}else if(wifiNetworkInfo.isConnected())
{
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
ip = intToIp(ipAddress);
System.out.println("wifi_ip ------"+ip);
}
モバイルネットワークに接続されている場合は、第2ステップは、ローカルipアドレスを取得する:get LocalpAddres()このように取得されたのはipv 4フォーマットのipアドレスです。
public String getLocalIpAddress() {
try {
String ipv4;
ArrayList<NetworkInterface> nilist = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni: nilist)
{
ArrayList<InetAddress> ialist = Collections.list(ni.getInetAddresses());
for (InetAddress address: ialist){
if (!address.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress()))
{
return ipv4;
}
}
}
} catch (SocketException ex) {
Log.e("localip", ex.toString());
}
return null;
}
もし接続されているのがWI-FIネットワークなら、第3ステップはWI-FI IPアドレス:intToIp(ipAddress)を取得する。
public static String intToIp(int ipInt) {
StringBuilder sb = new StringBuilder();
sb.append(ipInt & 0xFF).append(".");
sb.append((ipInt >> 8) & 0xFF).append(".");
sb.append((ipInt >> 16) & 0xFF).append(".");
sb.append((ipInt >> 24) & 0xFF);
return sb.toString();
}
インターネット上の多くのコードはipv 6のローカルipを取得していますが、WeChat支払いではこのipアドレスはWeChatではお支払いできません。
private String getlocalIp() {
String ip;
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()&&!inetAddress.isLinkLocalAddress()) {
// ip=inetAddress.getHostAddress().toString();
System.out.println("ip=========="+inetAddress.getHostAddress().toString());
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
この論文では、Androidが携帯電話のIPアドレスを正確に取得する方法を紹介します。Androidが携帯電話のIPアドレスを取得する方法については、下記の関連リンクをご覧ください。