当前位置:操作系统 > 安卓/Android >>

Android开发提高篇(1)-----获取本地IP

一、概述
       习惯了Linux下的网络编程,在还没用智能机之前就一直想知道怎么得到手机的IP地址(玩智能机之前我是不搞手机应用的)。好了,得知Android是基于Linux内核的,那么不就可以利用之前学的Linux下的网络编程方法来获取IP了吗?呵呵,其实这是比较底层的方法,在Android上,完全可以利用Java的API来实现,而且实现的代码非常简单。下面的实现只可以获取到本地IP(内网IP),不包括外网IP,想获得外网IP的话要用其他方法。
 
二、实现
    新建工程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对象,编写一个对话框函数,当用户没有打开网络就运行该程序时,该对话框会提示用户检查网络。完整的GetIp.java文件如下:
 
  1 package com.nan.getip;
  2
  3 import android.app.Activity;
  4 import android.app.AlertDialog;
  5 import android.content.DialogInte易做图ce;
  6 import android.net.ConnectivityManager;
  7 import android.net.NetworkInfo;
  8 import android.os.Bundle;
  9 import java.net.InetAddress;
 10 import java.net.NetworkInte易做图ce;
 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<NetworkInte易做图ce> mEnumeration = NetworkInte易做图ce.getNetworkInte易做图ces(); mEnumeration.hasMoreElements();)
 52             {
 53                NetworkInte易做图ce 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         {

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,