android中获取IP的方法

这是看到了Android_Tutor的博客中的内容,就贴过来自己学习下了

public String getLocalIpAddress() {  

    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()) {  

                    return inetAddress.getHostAddress().toString();  

                }  

            }  

        }  

    } catch (SocketException ex) {  

        Log.e(LOG_TAG, ex.toString());  

    }  

    return null;  

}  

还有种方法:

WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);  

WifiInfo wifiInfo = wifiManager.getConnectionInfo();  

int ipAddress = wifiInfo.getIpAddress();  

wifi的网络,得到一个int值,要再写个int转换ip的方法,就可以得到ip地址了:

public static String longToIP(long longIp) {

// linux long是低位在前,高位在后

StringBuffer sb = new StringBuffer("");

// 将高24位置0

sb.append(String.valueOf((longIp & 0x000000FF)));

sb.append(".");

// 将高16位置0,然后右移8位

sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));

sb.append(".");

// 将高8位置0,然后右移16位

sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));

sb.append(".");

// 直接右移24位

sb.append(String.valueOf((longIp >>> 24)));

return sb.toString();

}

 

 

 

来看个完整例子的:

新建工程GetIp,修改/res/layout/main.xml文件,在里面增加一个TextView文本,完整的main.xml文件如下:
1 <?xml version="1.0" encoding="utf-8"?>

 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3     android:orientation="vertical"

 4     android:layout_width="fill_parent"

 5     android:layout_height="fill_parent"

 6     >

 7

 8      <TextView

 9         android:id="@+id/nametextview"

10         android:layout_width="fill_parent"

11         android:layout_height="wrap_content"

12         android:text=" "

13         android:textSize="20px"

14         />

15

16     <TextView

17         android:id="@+id/ipTextView"

18         android:layout_width="fill_parent"

19         android:layout_height="wrap_content"

20         android:text=" "

21         android:textSize="20px"

22         />

23

24 </LinearLayout>

修改GetIp.java文件,主要是声明一个ConnectivityManager对象和一个NetworkInfo对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。

1 package com.nan.getip;

  2

  3 import android.app.Activity;

  4 import android.app.AlertDialog;

  5 import android.content.DialogInterface;

  6 import android.net.ConnectivityManager;

  7 import android.net.NetworkInfo;

  8 import android.os.Bundle;

  9 import java.net.InetAddress;

 10 import java.net.NetworkInterface;

 11 import java.util.Enumeration;

 12 import java.net.SocketException;

 13 import android.util.Log;

 14 import android.widget.TextView;

 15

 16

 17 public class GetIp extends Activity

 18 {

 19     private TextView ipTextView = null;

 20     private TextView nameTextView = null;

 21     //定义一个ConnectivityManager对象

 22     private ConnectivityManager mConnectivityManager = null;

 23     //定义一个NetworkInfo对象

 24     private NetworkInfo mActiveNetInfo = null;

 25

 26     /** Called when the activity is first created. */

 27     @Override

 28     public void onCreate(Bundle savedInstanceState)

 29     {

 30         super.onCreate(savedInstanceState);

 31         setContentView(R.layout.main);

 32

 33         nameTextView = (TextView)findViewById(R.id.nametextview);

 34         ipTextView = (TextView)findViewById(R.id.ipTextView);

 35         //实例化mConnectivityManager对象

 36         mConnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);//获取系统的连接服务

 37         //实例化mActiveNetInfo对象

 38         mActiveNetInfo = mConnectivityManager.getActiveNetworkInfo();//获取网络连接的信息

 39         if(mActiveNetInfo==null)

 40             myDialog();

 41         else

 42             setUpInfo();

 43

 44     }

 45

 46     //获取本地IP函数

 47     public String getLocalIPAddress()

 48     {

 49         try

 50         {

 51             for (Enumeration<NetworkInterface> mEnumeration = NetworkInterface.getNetworkInterfaces(); mEnumeration.hasMoreElements();)

 52             {

 53                NetworkInterface intf = mEnumeration.nextElement();

 54                for (Enumeration<InetAddress> enumIPAddr = intf.getInetAddresses(); enumIPAddr.hasMoreElements();)

 55                {

 56                    InetAddress inetAddress = enumIPAddr.nextElement();

 57                    //如果不是回环地址

 58                    if (!inetAddress.isLoopbackAddress())

 59                    {

 60                        //直接返回本地IP地址

 61                        return inetAddress.getHostAddress().toString();

 62                    }

 63                }

 64            }

 65         }

 66         catch (SocketException ex)

 67         {

 68             Log.e("Error", ex.toString());

 69         }

 70         return null;

 71     }

 72

 73     //显示IP信息

 74     public void setUpInfo()

 75     {

 76         //如果是WIFI网络

 77         if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_WIFI)

 78         {

 79             nameTextView.setText("网络类型:WIFI");

 80             ipTextView.setText("IP地址:"+getLocalIPAddress());

 81         }

 82         //如果是手机网络

 83         else if(mActiveNetInfo.getType()==ConnectivityManager.TYPE_MOBILE)

 84         {

 85             nameTextView.setText("网络类型:手机");

 86             ipTextView.setText("IP地址:"+getLocalIPAddress());

 87         }

 88         else

 89         {

 90             nameTextView.setText("网络类型:未知");

 91             ipTextView.setText("IP地址:");

 92         }

 93

 94     }

 95

 96     //显示对话框

 97     private void myDialog()

 98     {

 99         AlertDialog mDialog = new AlertDialog.Builder(GetIp.this)

100         .setTitle("注意")

101         .setMessage("当前网络不可用,请检查网络!")

102         .setPositiveButton("确定", new DialogInterface.OnClickListener()

103         {

104

105             @Override

106             public void onClick(DialogInterface dialog, int which)

107             {

108                 // TODO Auto-generated method stub

109                 //关闭对话框

110                 dialog.dismiss();

111                 //结束Activity

112                 GetIp.this.finish();

113             }

114         })

115         .create();//创建这个对话框

116         mDialog.show();//显示这个对话框

117     }

118

119 }
最后,修改AndroidManifest.xml文件,在里面添加2个权限:

 

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

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

你可能感兴趣的:(android)