如何獲取Android IP地址

from http://www.2cto.com/kf/201108/99623.html


1.使用WIFI

首先設置用戶權限

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

其次,代碼如下

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        //獲取wifi服務

        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

        //判斷wifi是否開啓

        if (!wifiManager.isWifiEnabled()) {

        wifiManager.setWifiEnabled(true);  

        }

        WifiInfo wifiInfo = wifiManager.getConnectionInfo();     

        int ipAddress = wifiInfo.getIpAddress(); 

        String ip = intToIp(ipAddress); 

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

        et.setText(ip);

    }   

    private String intToIp(int i) {     

       

          return (i & 0xFF ) + "." +     

        ((i >> 8 ) & 0xFF) + "." +     

        ((i >> 16 ) & 0xFF) + "." +     

        ( i >> 24 & 0xFF) ;

     } 

2.使用GPRS

首先,設置用戶上網權限

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

其次,代碼如下

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("WifiPreference IpAddress", ex.toString());

        }

        return null;

    }





public String GetIpAddress() {
        Enumeration<NetworkInterface> netInterfaces = null;
        try {
            netInterfaces = NetworkInterface.getNetworkInterfaces();
            while (netInterfaces.hasMoreElements()) {
                NetworkInterface ni = netInterfaces.nextElement();
                System.out.println("DisplayName:" + ni.getDisplayName());
                System.out.println("Name:" + ni.getName());
                Enumeration<InetAddress> ips = ni.getInetAddresses();
                while (ips.hasMoreElements()) {
                    InetAddress ip = ips.nextElement();
                    if (!ip.isLoopbackAddress()) {
                        return ip.getHostAddress();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

在android系統的pad中是不需要區分是網線連接和無論是通過apache方式連接如:

 

       HttpClient httpClient = new DefaultHttpClient(); // 自動獲取網絡
       
        if(NetworkHelpers.queryPreferedNetworkType(context) != ConnectivityManager.TYPE_WIFI) {
            APN apn = NetworkHelpers.queryPreferedApn(context);
            String proxyStr = apn.getProxy();
            if(!TextUtils.isEmpty(proxyStr) && !TextUtils.isEmpty(apn.getPort()) && apn.getPort().matches("[0-9]*")) {
                HttpHost proxy = new HttpHost(apn.getProxy(),
                        Integer.parseInt(apn.getPort()));
                httpClient.getParams().setParameter(
                        ConnRoutePNames.DEFAULT_PROXY, proxy);
            }
        }
       
        HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), TIME_OUT);
        try {
            HttpUriRequest request = null;
            if (postValues == null) {
                HttpGet getter = new HttpGet(urlStr);
                request = getter;
            } else {
                HttpPost poster = new HttpPost(urlStr);
                poster.setEntity(new UrlEncodedFormEntity(postValues, ENCODE_UTF_8));
                request = poster;
            }
            HttpResponse response = httpClient.execute(request);
            HttpEntity entity = null;
            if (response != null) {
                entity = response.getEntity();
            }
            if (entity != null) {
                in = entity.getContent();
            }

 

 

android 方式連接如:

            URL url = new URL(info.mUrl);
            connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(TIME_OUT);

 

都能自動區分網絡類型通過測試應該會優先選擇無線網絡,如果沒有無線網絡會選擇有線


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章