android 获取IP

来源:互联网 发布:淘宝自动回复怎么设置 编辑:程序博客网 时间:2024/06/06 00:10

1.如果使用WIFI可以用android自带的类来获取IP

首先设置用户权限

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

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

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

   

其次,代码如下   

  1. public void onCreate(Bundle savedInstanceState) {   
  2.         super.onCreate(savedInstanceState);   
  3.         setContentView(R.layout.main);   
  4.            
  5.         //获取wifi服务   
  6.         WifiManager wifiManager (WifiManager) getSystemService(Context.WIFI_SERVICE);   
  7.         //判断wifi是否开启   
  8.         if (!wifiManager.isWifiEnabled())    
  9.         wifiManager.setWifiEnabled(true);      
  10.            
  11.         WifiInfo wifiInfo wifiManager.getConnectionInfo();         
  12.         int ipAddress wifiInfo.getIpAddress();     
  13.         String ip intToIp(ipAddress);     
  14.         EditText et (EditText)findViewById(R.id.EditText01);   
  15.         et.setText(ip);   
  16.           
  17.     private String intToIp(int i)         
  18.            
  19.           return (i 0xFF "."         
  20.         ((i >> 8 0xFF"."         
  21.         ((i >> 16 0xFF"."         
  22.         >> 24 0xFF;   
  23.      }

2.java方法:这时相当于是用的java的类来获取ip,其实这个不仅可以获得GPRS的,wifi的一样能够获取!   

首先,设置用户上网权限     

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

其次,代码如下     

  1. public String getLocalIpAddress()    
  2.        
  3.         try    
  4.            
  5.             for (Enumeration<NetworkInterface> en NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)    
  6.                
  7.                NetworkInterface intf en.nextElement();    
  8.                for (Enumeration<InetAddress> enumIpAddr intf.getInetAddresses(); enumIpAddr.hasMoreElements();)    
  9.                   
  10.                    InetAddress inetAddress enumIpAddr.nextElement();    
  11.                    if (!inetAddress.isLoopbackAddress())    
  12.                       
  13.                        return inetAddress.getHostAddress().toString();    
  14.                       
  15.                   
  16.               
  17.            
  18.         catch (SocketException ex)    
  19.            
  20.             Log.e("WifiPreference IpAddress"ex.toString());    
  21.            
  22.         return null   
  23.       

3.可以通过创建一个socket,通过socket来获取本地的IP地址。

try{

         Socket socket = new Socket("www.baidu.com", 80);

         Log.i("", socket.getLocalAddress().toString());)}

         catch(Exception e){

                 Log.i("",e.getMessage());

}

 

 

 

 

总之其实完全可以通过下面这个完整的文件来实现以上三个方法:

 

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.Socket;

import java.util.Enumeration;

 

import android.app.Activity;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.os.Bundle;

import android.text.format.Formatter;

import android.widget.EditText;
import android.widget.TextView;

 

public class IpAddressgetActivity extends Activity {

   

    //private TextView mText;

   

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        EditText et = (EditText)findViewById(R.id.edittext01);

        String ip = null;

       

        //Method 1

        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

        WifiInfo info = wifiManager.getConnectionInfo();

        ip = "wifiInfo :" + Formatter.formatIpAddress(info.getIpAddress());

        ip += "\n";

       

        //Method 2

        try{

            Socket socket = new Socket("10.40.73.41", 80);

            ip += "socket : " + socket.getLocalAddress().toString() + "\n";

        } catch (Exception e) {

            e.printStackTrace();

            //throw new RuntimeException();

        }

       

        //Method 3

        try {

            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();

            NetworkInterface inf = interfaces.nextElement();

            for (Enumeration<InetAddress> enumAddress = inf.getInetAddresses();enumAddress.hasMoreElements();) {

                InetAddress in = enumAddress.nextElement();

                if(!in.isLinkLocalAddress()) {

                    ip += "NetworkInterface : " + in.getHostAddress() + "\n";

                }

            }

        }catch (Exception e) {

            e.printStackTrace();

            //throw new RuntimeException();

        }

       

        et.setText(ip);

    }

}