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>
posted @ 2012-08-15 16:54  Tammie-锴  阅读(2025)  评论(0编辑  收藏  举报