关于android Ip地址的获取

来源:互联网 发布:hdu2009 java 编辑:程序博客网 时间:2024/06/01 23:57

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);

   }

}
原创粉丝点击